WEB安全---XSS, CSRF, JSOP劫持三种漏洞简介以及防范方法

XSS ( 跨站脚本攻击 )

定义: 通过恶意攻击者往WEB页面插入恶意JS代码, 当用户浏览, 嵌入的代码会被执行, 达到恶意攻击用户控制浏览器的目的. xss是代码注入的一种.

分类

反射型

攻击者将跨站代码写在链接中, 受害者请求这种连接时, 跨站代码经过服务端反射回来触发, 此类代码不会存储到服务端.

存储型

攻击者将恶意数据存储到服务端的数据库中, 服务器脚本从数据库中获取该数据后, 没有进行安全处理即显示在公开页面上, 受害者访问该页面即中招.

DOM型

由js脚本动态创建, 输出到页面造成的. 此类型不需要经过服务器.

防御方法

  • 永远不要相信用户的输入: 输入过滤, 输出转义
  • 输入: 非字符串或有固定值时, 事先进行类型/值检查
  • 输出: 进行html转义(如<转义为&lt;)
  • callback参数只允许字母, 数字, 下划线
  • Java项目使用安全包, 可使用esapi的过滤
  • PHP可参见开发规范

CSRF(跨站请求伪造)

定义: 链接的表单提交的所有请求参数都可被预测, 攻击者构造好一个站内URL或在第三方网站设置一个自动提交的表单, 当合法用户在登录状态时, 攻击者诱使其点击, 此时就会在不知情的情况下执行了攻击者伪造的请求

检测步骤

  • 对所有增删改操作的URL进行检查, 是否在POST参数中存在token, 如果无token则存在风险.
  • 若存在token, 则token设置为空以及任意token进行重放, 检查是否能够成功执行, 如果执行成功, 则存在风险

防御方法

  • 对所有涉及增删改的操作添加csrftoken, 并于服务端验证: 1. 服务端生成csrftoken, 放入服务端session, 放入前端cookie中; 2. 前端url通过js抓取cookie内容带入请求head中; 3. 服务端获取head中csrftoken与之前放入的session的做比较.
  • java使用安全包

Jsonp劫持

定义: 为了解决跨域问题, 使用jsonp方式传输数据, 由于数据很难做到权限校验, 攻击者可以构造带有该jsonp接口的恶意页面, 发给用户点击, 从而用户的敏感数据通过jsonp接口传输到攻击者的服务器上.

例:

1
2
3
4
5
6
7
8
<html>
<script>
function aaa(data) {
// 发送data到攻击者服务器
}
</script>
<script src="http://a.com/get?callback=aaa" />
</html>

防御方法

  • 敏感数据尽量不要采用JSONP跨域传输.
  • 如果需要, JSONP接口的后端需要对referer进行校验, 只允许受信任的调用方域名的页面里嵌入我们的JSONP或者token
  • 域名是否受信任, 可使用安全包的URL白名单校验函数检查
越来越多的平台(微信公众平台,新浪微博,简书,百度打赏等)支持打赏功能,付费阅读时代越来越近,特此增加了打赏功能,支持微信打赏和支付宝打赏。坚持原创技术分享,您的支持将鼓励我继续创作!