XSS:
-
存储型:持久化
代码是存储在 服务器 中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种 XSS 比较危险,容易造成蠕虫,盗窃 cookie。
-
反射型:非持久化
需要欺骗用户自己去点击链接才能触发 XSS 代码(服务器中没有这样的页面和内容),一般容易出现在 web 页面。反射型 XSS 大多数是用来盗取用户的 Cookie 信息。
-
DOM 型:不经过后端
DOM-XSS 漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS 是通过 url 传入参数去控制触发的,其实也属于反射型 XSS。
防护方案:
对 用户的输入(和 URL 参数) 进行 过滤 ,对 输出 进行 html 编码。也就是对用户提交的所有内容进行过滤,对 url 中的参数进行过滤;然后对动态输出到页面的内容进行 html 编码,转换为 html 实体,使脚本无法在浏览器中执行。
对输出进行 html 编码,就是通过函数,将用户的输入的数据进行 html 编码,使其不能作为脚本运行。
使用 php 中的 htmlspecialchars 函数对用户输入的 name 参数进行 html 编码,将其转换为 html 实体
$name = htmlspecialchars($_GET['name'])
我们还可以服务端设置会话 Cookie 的 HTTP Only 属性,这样,客户端的 JS 脚本就不能获取 Cookie 信息了
CSRF:
- 攻击一般发起在第三方网站,而不是被攻击的网站,被攻击的网站无法防止攻击发生。
- 攻击者利用受害者在被攻击网站的登录凭证,冒充受害者提交操作,而不是直接窃取数据;
- 整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”。
防护方案:
CSRF通常从第三方网站发起,被攻击的网站无法防止攻击发生,只能通过增强自己网站针对CSRF的防护能力来提升安全性。