web安全

SQL

  • stripslashes()函数过滤用户输入,然后再用mysql_real_escape_string()对用户输入进行sql语句过滤
  • 参数类型绑定或强制转换intval(),关键字预处理

XSS

类型

  • 反射型XSS
1
2
反射型XSS也被称为非持久性XSS,这种攻击方式把XSS的Payload写在URL中,通过浏览器直接“反射”给用户。
这种攻击方式通常需要诱使用户点击某个恶意链接,才能攻击成功。
  • 存储型XSS
1
2
3
存储型XSS又被称为持久性XSS,会把黑客输入的恶意脚本存储在服务器的数据库中。
当其他用户浏览页面包含这个恶意脚本的页面,用户将会受到黑客的攻击。
一个常见的场景就是黑客写下一篇包含恶意JavaScript脚本的博客文章,当其他用户浏览这篇文章时,恶意的JavaScript代码将会执行。
  • DOM Based XSS
1
2
DOM Based XSS是一种利用前端代码漏洞进行攻击的攻击方式。
前面的反射型XSS与存储型XSS虽然恶意脚本的存放位置不同,但其本质都是利用后端代码的漏洞。

反射型和存储型xss是服务器端代码漏洞造成的,payload在响应页面中,DOM Based中,payload不在服务器发出的HTTP响应页面中,当客户端脚本运行时(渲染页面时),payload才会加载到脚本中执行

防御

  • HttpOnly
1
使用HTTP only的cookie
  • strip_tags、htmlspecialchars
1
2
3
4
5
6
在使用htmlspecialchars()函数的时候注意第二个参数, 直接用htmlspecialchars($string) 的话,
第二个参数默认是ENT_COMPAT,函数默认只是转化双引号(“), 不对单引号(‘)做转义.
所以,htmlspecialchars函数更多的时候要加上第二个参数, 应该这样用: htmlspecialchars($string,ENT_QUOTES).
当然,如果需要不转化如何的引号,用htmlspecialchars($string,ENT_NOQUOTES).
富文本内容里可以过滤掉<script>标签,因为富文本只是文章,不可能会嵌入script脚本
处理DOM元素属性中的script脚本
  • HTML Purifier
谢谢您请我喝咖啡!