Web 安全

文章目录

    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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式