Web 安全

更新日期: 2015-12-12 阅读次数: 7139 分类: 安全

Quick Links

SQL 注入问题

一定要确定单引号被转义过了。

https://github.com/sqlmapproject/sqlmap

域名反查 IP

http://sameip.org/

web 服务需要注意的

  • 隐藏版本号。例如,Nginx
  • 隐藏目录结构
  • debug 关闭
  • static + 相对目录造成代码或者配置文件泄漏

JSON hijacking/JSON 劫持漏洞

hijacking - 劫持

Javascript 获取服务端用户数据的方式分两种

  • 同域下使用 ajax 请求即可
  • 跨域时使用 script 标签,添加 callback

JSON hijacking 即是通过对第二种情况,在三方页面中加入该 script 标签,将 callback 写成邪恶的逻辑。 例如,发送用户数据到自己后台等。

修复方案:

  • 同域尽量使用 xmlhttp 的 ajax 方式
  • 如果非要跨域,那么,严格限制 referer,因为前端 referer 不可伪造,但是如果同时存在 XSS,那么这种方案就会失效。
  • 类似与 CSRF 的 token 机制,但是如果同时存在 XSS,仍会失效。

参考:

XSS - Cross Site Scripting 跨站脚本

分类:

  • DOM-based XSS (非常驻型, 常驻型)
  • 存储型 XSS (常驻型)
  • 反射型 XSS (非常驻型, )

反射型,是构造带有恶意代码参数的URL,诱骗用户点击之后,触发以获取用户敏感信息。 我就写过这种 bug,对用户输入的数据没有任何校验,escape,就返回到了页面上。

DOM-based XSS 比较特殊。这个属于前端 JS 代码的 bug,例如百度翻译的那个案例, 根据搜索词条,拉取百度百科中对应的信息。 由于前端页面采用了 innerHTML 插入页面,并且没有做 escape, 所以恶意用户就可以在百度百科中做手脚,加入恶意 javascript。 间接达到了在百度翻译中生效的结果。

XSS 利用了 HTML,以及 javascript 的语法漏洞,所以得对各种特殊符号进行转义

单引号
双引号
尖括号
&
%
*

参考:

请求伪造

两种类型

  • cross-site request forgery 跨站点请求伪造 CSRF/XSRF
  • on-site request forgery 本站点请求伪造

当用户浏览 flash 或者三方恶意网站时,js/flash 会让用户在感知不到的情况下发起 CGI 请求,可能造成用户在服务端数据被篡改。 原因是,浏览器向目标网站发送 ajax 请求时,会附带上该网站在浏览器本地的 cookie,所以即使是在访问三方网站,也会将 cookie 传到原服务器。

  • 图片验证码
  • 表单 Token
  • 验证 referer

Click Hijacking

是一种视觉欺骗手段,在web端就是iframe嵌套一个透明不可见的页面,让用户在不知情的情况下,点击攻击者想要欺骗用户点击的位置。

防御方法:

禁止页面被三方站点嵌入。

<script>
if (self == top) {
    var theBody = document.getElementsByTagName('body')[0];
    theBody.style.display = "block";
} else {
    top.location = self.location;
}
</script>

参考:

重定向漏洞

用户默认认为网站里的链接,或者跳向的链接是安全的,特别是界面风格一致的情况下。 例如,防止登录之后,next 指向了三方钓鱼网站。

危害:

  • 在钓鱼站里骗取用户密码
  • 交易行为

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式