前端基础重点回顾5:XSS、CSRF攻击

XSS

攻击前提
  • 攻击脚本必须添加到页面上
攻击方式
  • 跨站脚本XSS(Cross site script) 代码注入
  • script 标签注入攻击 <li><script>alert(1)</script></li>
  • 标签属性注入攻击 <img src="" onerror="alert(1)"> <p onclick="alert(2)">诱导点击</p>
  • 广告注入 <iframe src=''></iframe>
防止XSS攻击
  • 获取的数据不允许进行字符串拼接
  • 使用element.inneText方法 把数据添加到dom 中,inneText 方法会转义所有内容
  • 把所有数据里的/["'&<>]/使用正则进行转义
  • 存储数据时过滤并转义/["'&<>]/
  • 防止URL 上的参数在页面上展示 http://url?code=<p onclick="alert(2)">诱导点击</p> 这里的code query参数内容不得在页面中渲染

CSRF

攻击原理
  • 利用用户已经登录的状态 伪造请求发送给服务器进行用户操作
攻击方式
  • 跨站请求伪造(Cross site request forgery)
  • 用户已登录(cookie登录)如果没设置httpOnly cookie是根据域名和路径访问的, 无关端口
  • 伪造请求(GET, POST)
伪造GET
<img src="http://localhost:3000/csrf?data=111" alt="">
http://localhost:3000/csrf?data=111 // 直接地址栏中输入
表单伪造POST
    <form id="form" style="display: none;" action="http://localhost:3000/csrf?data=111" method="post" target="csrf">
    </form>
    <input id="btn" type="button" value="submit">
    <iframe src="" style="display: none;" name="csrf" frameborder="0"></iframe>
    <script>
      btn.addEventListener('click', (e) => {
        e.preventDefault()
        form.submit()
      })
    </script>

防止CSRF攻击

  • 请求时不仅浏览器携带cookie, 请求参数也需要把跟cookie 相关的值携带到参数中, 伪造的请求无法获取正确网站cookie的值, 比如常见约定的csrfToken
  • 使用Authorization 的token 授权
  • 提交表单的时候增加token 认证
  • 验证请求header 的Referer 携带请求来源信息
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容