如何用简洁生动的语言说明 XSS 和 CSRF 的区别?
26 个回答
马三立小品〈逗你玩〉中的小偷就利用xss突破了防盗系统。
防盗系统启动:
妈妈:给我看着衣服
小孩:好的
小偷来
正常工作:
小孩:你是谁?
小偷:我叫张三
小孩:妈妈,有人偷衣服
妈妈:谁?
小孩:张三
小偷被捉
漏洞:
小孩:你是谁?
小偷:我叫逗你玩
小孩:妈妈,有人偷衣服
妈妈:谁?
小孩:逗你玩
妈妈:。。。
csrf是让用户在不知情的情况,冒用其身份发起了一个请求
小偷:你妈妈喊你去买洗衣粉
----------------------------------------------
补充一下,XSS本质是Html注入,和SQL注入差不多。
SQL、Html、人类语言都是指令和数据混在一起,都存在注入风险(程序根据分隔符、标签识别指令和数据,人类则是根据语境、语义和日常经验判断)。
比如注册用户时,用户输入“张三”并提交,服务端会生成“ <p>欢迎新用户,张三</p> ”传给浏览器。如果用户输入"<script>alert('逗你玩')<script>",服务端会生成 “<p>欢迎新用户,<script>alert('逗你玩')<script></p>”,输入内容就会被浏览器识别为指令执行,这就是XSS注入;
小偷也是根据这个原理,输入一个有特殊语义的名字,被其他客户端识别为指令,从而完成了一次漂亮的存储型XSS注入攻击。
xss原理上利用的是浏览器可以拼接成任意的javascript,然后黑客拼接好javascript让浏览器自动地给服务器端发出多个请求(get、post请求)。
csrf原理上利用的是网站服务器端所有参数都是可预先构造的原理,然后黑客拼接好具体请求url,可以引诱你提交他构造好的请求。
——
2021.02更新:
基础知识补充一下,有时候即使csrf有token保护 也可以因页面存在xss而被破解(攻击者拿javascript直接获取token就好了)