不可忽视的XSS攻击和CSRF欺骗

  1. 名词解释

    • XSS(Cross Site Scrip),本来是CSS 但是这名字太已经名花有主,所以改名XSS,跨域脚本(攻击)

    • CSRF(Cross-site request forgery),跨域请求欺骗

    • CORS(Cross-Origin Resource Sharing) 跨域资源共享,这是一种协议,协议要求如果跨域请求,那么默认是不会在浏览器显示的,注意这里实际上已经执行跨域请求,只是请求以后浏览器检测不允许跨域,后面的结果拿不到。但是行为已经执行了。

  2. XSS的危害

    • 例子1:黑客注册了你们平台的账号,黑客在自己的账号个性介绍,文章,博客等地方,写入js脚本,如果后端没有转义,就把这把这段信息存入数据库中,如果别的用户通过浏览器看到这段信息,里面的逻辑就会执行,模拟用户做任何事情。XSS在用户对外暴露的信息中(在网页上显示的信息),是不允许出现的,他能做到任何不需要二次确认的事情,它极度危险,它极度危险,它极度危险。

    • 例子2:黑客也可以通过链接里面的显示参数,向用户注入脚本。showPage?name="name"

    • 例子1解决办法:的数据会过后端,这类数据一定要在录入前过滤,对html标签进行转义。HtmlUtil.escape(输入文本)

    • 例子2解决办法:不一定过后端,多数情况是分享链接里面的参数直接显示,这种情况可以考虑,不要直接用前端url里面取出的参数直接显示,如果一定要显示,那么前端过滤html标签。

  3. CORS默认禁止跨域请求,但是有些开发者遇到跨域请求百度一下,查到的结果是设置access-Control-Allow-Origin=*就能解决。如果这样做了更加容易会引发CSRF问题。

  4. CSRF

    • 假设我们已经通过前面的手段做了XSS的防护,这时候黑客已经不能简单写入脚本获取用户信息了,这时候如果我们设置了access-Control-Allow-Origin=*。

    • 黑客做了一个钓鱼网站,用户正好访问了这个网站,里面嵌入的脚本在客户端浏览器执行,然后访问了你的服务器,并且带上来浏览器保存的cookie。因为你设置的access-Control-Allow-Origin=*,所以黑客可以在用户毫无感知的情况下做任何不需要二次确认的事情,比如通过脚本获取个人信息,通过脚本添加好友等等。

    • 怎么避免CSRF?第一不要设置access-Control-Allow-Origin=*,如果需要允许跨域,只能允许自己明确需要跨域的域名,比如前端界面的域。

    • 但是这样是不够的,即便不允许跨域,黑客拿不到数据,但是一些修改操作也已经被执行了,比如添加粉丝,没有密码确认的转账等等。这种应该怎么处理?

    • CSRF能成功很大程度是因为浏览器的cookie机制,访问一个域的时候默认会带上cookie信息。如果我们不适用cookie这种浏览器自带的机制,适用我们手动维护的在请求头里面带上身份认证新的token,这种东西是默认不会被带过去的。这样可以有效的避免CSRF。

  5. XSS的情况也和cookie有关系,如果是手动维护的token,同样不会默认带过去,但是因为在同一个域名下,脚本是可以获取到cookie 或者 js保存的临时变量的token的。所以这种情况只限制cookie是没用的,必须要杜绝脚本的嵌入。没有脚本的嵌入,能很大程度的避免token被泄露,和XSS问题的出现。

  6. token泄露问题,前面说了token如果前端存在临时变量里面,可能会被嵌入的脚本获取,另外token在传输的过程中也可能被获取。其实后端可以在token上做点事情,让token即便被获取了依旧无法使用。比如在token中加入 一些前端的唯一标志,比如mac地址。避免token的泄露也同样重要。

posted on 2023-02-14 19:28  zhangyukun  阅读(80)  评论(0编辑  收藏  举报

导航