XSS
XSS(Cross Site Scripting), 跨站脚本攻击,允许攻击者将恶意代码植入到提供给其它用户使用的页面中
- 特征:代码注入,就是恶意用户将代码注入到网页上,其他用户在观看网页时就会收到被注入代码的影响
- 目的:主要还是窃取用户数据信息或者破坏
- 防范方法:
- 输入过滤:即对用户输入的数据进行过滤操作,过滤其中的“<”,">","/",“”script”等脚本关键字,或者对输入数据长度进行限制等等。着重对与用户交互的每一处都进行检测和xss过滤,以有效的阻止xss攻击
- 输出编码:在用户输入数据到web应用程序中时,先对数据进行编码,利用htmlEncoder等工具进行编码,然后再把数据输出到页面中,一般可以把输入编码为普通文字,这样以来脚本语言就不会成为html代码的一部分
- Cookie防盗:利用xss,攻击者可以窃取用户的cookie,所以可以对cookie中的重要信息进行MD5加密,以防止xss攻击
CSRF
CSRF(Cross-site request forgery)跨站请求伪造,在用户不知情的情况下,冒充用户发送请求,伪造请求,在当前已登录的网站上执行恶意操作,比如恶意发帖、修改密码等
- 防范方法
- 检查Referer字段:HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。在处理敏感数据请求时,通常来说,Referer字段应和请求的地址位于同一域名下。以上文银行操作为例,Referer字段地址通常应该是转账按钮所在的网页地址,应该也位于www.examplebank.com之下。而如果是CSRF攻击传来的请求,Referer字段会是包含恶意网址的地址,不会位于www.examplebank.com之下,这时候服务器就能识别出恶意的访问
(这种办法简单易行,工作量低,仅需要在关键访问处增加一步校验。但这种办法也有其局限性,因其完全依赖浏览器发送正确的Referer字段。虽然http协议对此字段的内容有明确的规定,但并无法保证来访的浏览器的具体实现,亦无法保证浏览器没有安全漏洞影响到此字段。并且也存在攻击者攻击某些浏览器,篡改其Referer字段的可)
- 验证码方式:在一些关键操作上要求输入验证码,防止伪请求
- token方式:服务器传参数时带上token,token是服务器和用户共同持有的一个随机值。用户提交表单时带上token值,服务器就可以验证表单和session中的token是否一致
(常用)
- 检查Referer字段:HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。在处理敏感数据请求时,通常来说,Referer字段应和请求的地址位于同一域名下。以上文银行操作为例,Referer字段地址通常应该是转账按钮所在的网页地址,应该也位于www.examplebank.com之下。而如果是CSRF攻击传来的请求,Referer字段会是包含恶意网址的地址,不会位于www.examplebank.com之下,这时候服务器就能识别出恶意的访问
SQL注入
SQL攻击(SQL injection),简称注入攻击,是发生于应用程序之数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵。
- 防范方法
- 在设计应用程序时,完全使用参数化查询(Parameterized Query)来设计数据访问功能
- 在组合SQL字符串时,先针对所传入的参数作字元取代(将单引号字元取代为连续2个单引号字元)
- 使用其他更安全的方式连接SQL数据库。例如已修正过SQL注入问题的数据库连接组件,例如ASP.NET的SqlDataSource对象或是 LINQ to SQL
- 使用SQL防注入系统