如何用简洁生动的语言说明 XSS 和 CSRF 的区别?

关注者
474
被浏览
141,847

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就好了)