前端安全性问题:XSS、CSRF、SQL等漏洞,和其他常见漏洞

XSS 跨站脚本攻击

是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点(过于信任客户端提交的数据!),进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。

XSS攻击的危害包括:

  1. 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

  2. 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

  3. 盗窃企业重要的具有商业价值的资料

  4. 非法转账

  5. 强制发送电子邮件

  6. 网站挂马

  7. 控制受害者机器向其它网站发起攻击

XSS漏洞修复

XSS防御的总体思路是:对用户的输入(和URL参数)进行过滤,对输出进行html编码。也就是对用户提交的所有内容进行过滤,对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行html编码,使脚本无法在浏览器中执行。

解决方法

  1. 将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了.
  2. 表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合。。。。
  3. 对数据进行Html Encode 处理
  4. 过滤JavaScript 事件的标签。例如 “οnclick=”, “onfocus” 等等。
  5. 过滤或移除特殊的Html标签, 如下表:
字符 描述 转义字符 十进制
空格    
< 小于号 < <
> 大于号 > >
& 和号 & &
" 双引号 " "
单引号 ' '

CSRF 跨站请求伪造

是一种恶意利用从网站信任用户获取未授权命令的行为,攻击原理如下图。
和跨站脚本(XSS)不同,XSS利用的是特定站点信任的用户,而CSRF利用的是用户浏览器中信任的站点。
前端安全性问题:XSS、CSRF、SQL等漏洞,和其他常见漏洞_第1张图片

以下是CSRF常用特征:

  1. 涉及网站依赖用户身份认证
  2. 利用身份认证获取网站信任
  3. 欺骗用户浏览器发送HTTP请求到目标站点
  4. 涉及的HTTP请求都有副作用

CSRF的防御

  1. 尽量使用POST,限制GET。当然POST并不是万无一失,攻击者只要构造一个form就可以,但需要在第三方页面做,这样就增加暴露的可能性。
  2. 将cookie设置为HttpOnly,为了防止站内的XSS漏洞盗取cookie,需要在cookie中设置“HttpOnly”属性,这样通过程序(如JavaScript脚本、Applet等)就无法读取到cookie信息,避免了攻击者伪造cookie的情况出现。
在Java的Servlet的API中设置cookie为HttpOnly的代码如下:
response.setHeader( "Set-Cookie", "cookiename=cookievalue;HttpOnly");
  1. 增加token,在请求中放入攻击者所不能伪造的信息,并且该信息总不存在于cookie之中。
  2. 通过Referer识别,根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。如果是以同域名开头的地址,则说明该请求是来自网站自己的请求,是合法的;如果Referer是其他网站,就有可能是CSRF攻击,则拒绝该请求。

SQL 脚本注入

SQL 注入漏洞存在的原因,就是拼接 SQL 参数。也就是将用于输入的查询参数,直接拼接在 SQL 语句中,导致了SQL 注入漏洞。

简单来说,就是别人可以通过你的语法漏洞向你的数据库随便添加数据

采用sql语句预编译和绑定变量,是防御sql注入的最佳方法

String sql = "select id, no from user where id=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, id);
        ps.executeQuery();

其他

  • HTTP劫持
    核心:广告、弹框html注入
    描述:当我们访问页面的时候,运营商在页面的HTML代码中,插入弹窗、广告等HTML代码,来获取相应的利益

  • 界面操作劫持
    核心:视觉欺骗
    描述:界面操作劫持是一种基于视觉欺骗的劫持攻击。通过在页面上覆盖一个iframe + opacity:0的页面,让用户误点击

  • 错误的内容推断
    核心:js伪装成图片文件
    描述:攻击者将含有JavaScript的脚本文件伪装成图片文件(修改后缀等)。该文件逃过了文件类型校验,在服务器里存储了下来。接下来,受害者在访问这段评论的时候,浏览器请求这个伪装成图片的JavaScript脚本并执行

  • 不安全的第三方依赖包
    核心:第三方漏洞
    描述:框架及第三方依赖的安全漏洞

  • HTTPS降级HTTP
    核心:拦截首次http通信
    描述:问题的本质在于浏览器发出去第一次请求就被攻击者拦截了下来并做了修改,根本不给浏览器和服务器进行HTTPS通信的机会。大致过程如下,用户在浏览器里输入URL的时候往往不是从https://开始的,而是直接从域名开始输入,随后浏览器向服务器发起HTTP通信,然而由于攻击者的存在,它把服务器端返回的跳转到HTTPS页面的响应拦截了,并且代替客户端和服务器端进行后续的通信

  • 本地存储数据泄露
    核心:敏感、机密数据
    描述:前端存储敏感、机密信息易被泄露

  • 缺失静态资源完整性校验
    核心:CDN资源劫持
    描述:存储在CDN中的静态资源,攻击者劫持了CDN,或者对CDN中的资源进行了污染

  • 文件上传漏洞
    核心:文件类型限制
    描述:文件后缀及文件内容没有严格限制

  • 文件下载漏洞
    核心:文件类型、目录限制
    描述:下载敏感文件、下载目录

你可能感兴趣的:(前端安全性问题:XSS、CSRF、SQL等漏洞,和其他常见漏洞)