前端安全问题


参考资料

CSRF 攻击的应对之道
前端安全知识

XSS

  • Cross-Site Scripting(跨站脚本攻击)简称XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如cookie,sessionID等,进而危害数据安全
  • 存储型XSS:攻击者将恶意代码提交到目标网站的数据库中,用户打开目标网站时,服务器将恶意代码从数据库中去除,拼接在HTML中返回给浏览器;恶意代码窃取用户数据并发送到攻击这的网站,或者冒充用户的行为,调用目标网站执行攻击者指定的操作;常见于:论坛发帖、商品评论、用户私信
  • 反射型XSS:攻击者构造处特殊的URL,其中包含恶意代码;用户打开带有恶意代码的URL时,网站服务端将恶意代码从URL中取出,拼接在HTML中返回给浏览器;用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行;常见于:网站搜索、跳转等
  • DOM型XSS:攻击者构造出包含恶意代码的URL,用户打开带有恶意代码的URL,用户浏览器接收到响应后解析执行,前端JavaScript取出URL中的恶意代码并执行;DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞
  • 常见危害:
    • 通过document.cookie窃取cookie信息
    • 使用js或者css破坏页面的正常结构与样式
    • dos攻击:利用合理的客户端请求来占用过多的服务器资源,从而使合法用户无法得到服务器响应
  • XSS攻击的预防:
    • 前端输入过滤、转义(不能完全解决,前端校验可以被绕过,模拟直接请求);对输入内容的特定字符进行编码,比如表示 html标记的 <> 等符号
    • 对重要的cookie设置HttpOnly,防止客户端通过document.cookie窃取
    • CSP(Content-Security-Policy 内容安全策略):禁止加载外域代码
      <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self' ssl.google-analytics.com;">
      
    • 将不可信的值输出 URL参数之前,进行 URLEncode操作,而对于从 URL参数中获取值一定要进行格式检测
      function encode(str) {    
      if (!str || str.length === 0) return '';
      str = str.replace(/>/gm, '&gt;');
      str = str.replace(/</gm, '&lt;');
      str = str.replace(/"/gm, '&quot;');
      str = str.replace(/'/gm, '&apos;');    
      return str;
      }
      

      CSRF

  • CSRF (Cross-site request forgery) 跨站请求伪造是攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击的目的;
  • 两个要点:
    • 登录受信任的网站A,在本地生成cookie
    • 不登出A的情况下,访问危险网站B
  • 防御:
    • 验证HTTP Referer字段,限制请求的来源网站是否合法
    • 请求地址中添加token验证:关键在于在请求中放入不能伪造且不存在域cookie中的数据;可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求
    • HTTP中自定义属性并验证
  • Java示例
    // 从 HTTP 头中取得 Referer 值
    String referer=request.getHeader("Referer");
    // 判断 Referer 是否以 bank.example 开头
    if((referer!=null) &&(referer.trim().startsWith(“bank.example”))){
       chain.doFilter(request, response);
    }else{
       request.getRequestDispatcher(“error.jsp”).forward(request,response);
    }
    

文章作者: Susie Chang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Susie Chang !
 上一篇
HTTP详解 HTTP详解
参考资料 [图灵程序设计丛书].HTTP/2基础教程 HTTP 资源标识符 URI: 统一资源标识符 URL: 统一资源定位符 URN: 通过特定命名空间中的唯一名称来标识资源 URI语法 方案/协议 Protocol(dat
2018-08-22
下一篇 
CSS基础 CSS基础
参考资料 w3school css 盒子模型理解 基础 CSS 指层叠样式表(Cascading Style Sheets),把样式添加到HTML 4.0 中是为了解决内容与表现分离的问题 CSS层叠次序,样式优先级: 内联样式(HTML
2018-08-11
  目录