从互联网诞生起,安全就一直伴随着网站的发展,各种web攻击和信息泄露也从未停止,本文就当下最要的攻击手段进行一次简单的汇总,也作为自己的备忘。
1、XSS攻击
XSS攻击即跨站脚本攻击,指黑客篡改网页,注入HTML或script脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。常见的XSS攻击主要有两种,一是反射型,攻击者引诱用户点击一个嵌入恶意脚本的链接,打到攻击的目的,例如,攻击者发布的微博中有一个含有恶意脚本的URL,用户点击该URL,脚本会自动关注攻击者的新浪微博ID,发布含有恶意脚本URL的微博,攻击就被扩散了。
另外一种XSS攻击是持久性XSS攻击,黑客提交含有恶意脚本的数据,保存在攻击的Web站点的数据库中。此种攻击经常用在论坛博客等微博程序中。
XSS消毒
XSS攻击者一般都是通过在请求中嵌入恶意脚本达到攻击的目的,这些脚本是一般用户输入不使用的,如果进行过滤和消毒处理,即对某些HTML危险字符转移,如">"转义为">"、"<"转义为"<"等就可以防止大部分的攻击。
最早由微软提出,即浏览器禁止页面Javascript访问带有HttpOnly属性的Cookie。HttpOnly并不是直接对抗XSS攻击的,而是防止XSS攻击者窃取Cookie。对于存放敏感信息的Cookie,如用户认证信息等,科通过该Cookie添加HttpOnly属性,避免被攻击脚本窃取。
2、SQL注入
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.
当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造(或者影响)动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。例如,攻击者发送含有恶意恶意SQL命令的http请求,如(http://www.a.com?username=eric‘;
drop table users;--),服务器用请求参数构造数据库SQL命令时,恶意SQL就被一起构造,并在数据库中一起执行,如:select * from
users where username=‘eric‘; drop table users;--‘
消毒
1、关闭网站错误回显,即不要把服务器内部500错误显示到浏览器上。因为攻击者可能通过故意构造非法参数,使服务器端数据库表等异常信息显示到浏览器上,为攻击者猜测数据库表结构提供了便利。
2、通过正则匹配过滤请求数据中可能注入的SQL关键字,如“drop table”,“Update”、“Inser”,“EXEC”等。
3、使用预编译手段,绑定参数是最好的防止SQL注入方法。攻击者的恶意SQL会被当做SQL的参数,而不是命令被执行。
3、CSRF攻击
SCRF即跨站点伪造请求攻击,攻击者通过跨站请求,以合法用户身份进行非法操作,如转账交易、发表评论等,其核心是利用了浏览器Cookie或服务器Session策略,盗取用户身份,相应地,CSRF的预防手段主要是识别请求者身份。主要有一下几种方法。
表单Token
CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以,表单Token通过在请求参数中增加随机数的办法来阻止攻击者获取所有请求参数:在页面表单中增加一个随机数作为Token,每次相应页面的Token都不同,从正常页面提交的表单会包含该Token值,伪造的请求无法获取该值,服务器端检查请求参数中Token的值是否正确。
验证码
相对来说,验证码则更有效,即提交请求时,需要用户输入验证码,以避免用户在不知情的情况下被攻击者伪造请求。
Referer check
Http请求头的Referer域中记录着请求来源,可通过检查请求来源,验证 其是否合法,很多网站使用这个功能实现图片盗链(如果图片访问的页面来源不是来自自己网站的就拒绝访问)
4、其他攻击和漏洞
除了上面提到的常见攻击,还有一些漏洞也常被黑客利用
Error Page
许多Web应用 默认是打开异常信息输出的,即服务器端未处理的异常或堆栈信息会直接显示到客户的浏览器上,这种方式虽然对调试有好处,但同时也给黑客造成可乘之机。通过故意构造非法输入,使系统运行出错,获得异常信息,从而寻找系统漏洞进行攻击。
HTML注释
HTML注释会显示在客户端的浏览器中,给黑客造成攻击便利,因此程序发布时,最好把html注释去掉。
文件上传
设置文件上传白名单,只允许上传可靠的文件类型,例如,黑客可以通过网站文件上传功能上传的是可执行文件,并通过改程序获取服务器端执行命令的能力,那么攻击者几乎可以在服务器上为所欲为了。
我们还可以只用Web防火墙和网站安全漏洞扫描来保证网站的安全性。
本文参考:大型网站技术架构。