1.什么是 XSS 攻击,如何避免?
XSS攻击,即跨站脚本攻击。 原理是攻击者往 web 页面里插入恶意的脚本代码(CSS代码、JavaScript代码等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的。如盗取用户cookie,破坏页面结构、重定向到其他网站等。
例如:
在一个表单输入框中输入了随机的字符串,然后将字符串在另一个地方当成value变量输出。
<span value="字符串信息"></span>
如果字符串信息为:
"/><script>alert(document.cookie)</script><!-
那么转换后的结果就是:
<span value=" "/><script>alert(document.cookie)</script><!- "></span>
这将直接泄露用户的cookie信息。
预防措施
- 过滤特殊字符:许多语言都对HTML的过滤有方法提供:
PHP的
htmlentities()或是htmlspecialchars()
。
Python的cgi.escape()
。
ASP的Server.HTMLEncode()
。
ASP.NET的Server.HtmlEncode()
或功能更强的Microsoft Anti-Cross Site Scripting Library
Java的xssprotect (Open Source Library)。
Node.js的node-validator。
- 使用HTTP头指定类型
- 浏览器可能自带XSS过滤器
2.什么是 CSRF 攻击,如何避免?
CSRF的全称是“跨站请求伪造”。CSRF原理是伪造用户的正常操作,例如,当用户登录一个安全网站A,在浏览器中会保存用户的cookie,此时,当用户再去访问一个非法网站B,非法网站中会存在对网站A的请求,由于浏览器中已经保存了用户的cookie,所以安全网站会认为此请求是合法的,从而进行一些操作,但该操作是由非法网站发起的,是一种伪造用户行为的过程。
防御策略:
- 验证HTTP Referer字段:Referer记录了HTTP请求的来源地址,可以验证构造页面请求的URL。
缺点:Referer的值是由浏览器提供,不同浏览器的实现方式不同。同时,合法用户也可以在浏览器中设置拒绝提供Referer。
- 在请求地址中添加token并验证
- 在HTTP头中自定义属性并验证
3.如何避免 sql 注入?
- 严格限制Web应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限。
- 检查输入的数据是否具有所期望的数据格式,严格限制变量的类型。
- 对进入数据库的特殊字符进行转义处理,或编码转换。
- 所有查询语句建议使用数据库提供的参数化查询接口。
- 在应用发布之前建议使用专业的SQL注入检测工具进行检测,以及时修补被发现的SQL注入漏洞。
- 避免网站打印出SQL错误信息。
网友评论