csrf 攻击 和 XSS 攻击
———————— XSS 攻击 ————————
//什么是跨站脚本攻击?
允许恶意web用户将代码植入到提供给其它用户使用的页面中。
// 例子:
恶意用户在帖子的评论里输入了:
while(true){ alert('你关不掉我'); }
其他用户在访问这个帖子评论的时候,就会一直关不掉这个窗口。同理,可能执行 JS 脚本向其他地址发送一些信息,如 cookie 等。
// 过滤:
使用 htmlentities 等把字符转成成 html 实体。
———————— CSRF 攻击 ————————
// 什么是跨站请求伪造 (CSRF)
XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
// 关键问题:
web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
// 例子:
假如一家银行用以运行转账操作的URL地址如下: http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName
那么,一个恶意攻击者可以在另一个网站上放置如下代码: <img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman">
—— 如果有账户名为Alice的用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,那么她就会损失1000资金。
// 解决方法:
1、检查 referer 字段
HTTP头中有一个Referer字段,用以检查来源地址。但是保不准有些攻击者攻击浏览器,修改 refer 字段的可能。
2、检查 token —— 常用
—— 要求在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击者无法伪造的数据作为校验,那么攻击者就无法再运行CSRF攻击。
—— 服务器将其生成并附加在窗体中,其内容是一个伪随机数。当客户端通过窗体提交请求时,这个伪随机数也一并提交上去以供校验。正常的访问时,客户端浏览器能够正确得到并传回这个伪随机数,而通过CSRF传来的欺骗性攻击中,攻击者无从事先得知这个伪随机数的值,服务端就会因为校验token的值为空或者错误,拒绝这个可疑请求。
———— 占位符