XSS跨站脚本攻击漏洞解决

XSS(跨站脚本)攻击分类

  1. 存储型
    存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie
  2. 反射型
    非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面
  3. DOM型XSS
    不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。

XSS解决
解决思路:
控制脚本注入的语法要素。比如:JavaScript离不开:“<”、“>”、“(”、“)”、“;”…等等,我们只需要在输入或输出时对其进行字符过滤或转义处理就即可。一般我们会采用转义的方式来处理,转义字符是会使用到HTML的原始码,因为原始码是可以被浏览器直接识别的,所以使用起来非常方便。允许可输入的字符串长度限制也可以一定程度上控制脚本注入。

前端解决方案:

// 使用正则表达式实现html编码
    function htmlEncodeByRegExp(str) {
      var s = '';
      if (str.length === 0) {
        return s;
      }
      return (s + str)
        .replace(/&/g, "&")
        .replace(/</g, "<")
        .replace(/>/g, ">")
        .replace(/ /g, " ")
        .replace(/\'/g, "&#39")
        .replace(/\"/g, """)
        .replace(/\//g, '&#x2F;');
    }

    // 使用正则表达式实现html解码
    function htmlDecodeByRegExp(str) {
      var s = '';
      if (str.length === 0) {
        return s;
      }
      return (s + str)
        .replace(/&/g, "&")
        .replace(/</g, "<")
        .replace(/>/g, ">")
        .replace(/ /g, " ")
        .replace(/&#39/g, "\'")
        .replace(/"/g, "\"")
        .replace(/&#x2F;/g, "\/");
    }
//转换编码
function encodeForHTMLAttrbute(str) {
    let encoded = '';
    for(let i = 0; i < str.length; i++) {
        let ch = hex = str[i];
        if (!/[A-Za-z0-9]/.test(str[i]) && str.charCodeAt(i) < 256) {
            hex = '&#x' + ch.charCodeAt(0) + ';';
        }
//.toString(16)
        encoded += hex;
    }
    return encoded;
}

//解编码
function encodeDecodeHTMLAttrbute(str){
    if(str === null || str == ''){
        return "";
    }

    for(let i =0;i<str.length;i++){
        if(str.indexOf('&#x') > 0){
            str = str.replace(/&#x(.*?);/,String.fromCharCode(str.match(/&#x(.*?);/)[1]))
        }else {
            return str;
        }
    }
}

参考文章:
XSS(跨站脚本)漏洞详解之XSS跨站脚本攻击漏洞的解决
web安全之XSS攻击原理及防范

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,攻击者利用这个漏洞向网站中注入恶意代码,并在用户浏览器上执行。这种攻击通常发生在存在输入输出的网页应用程序中。 XSS攻击主要分为三种类: 1. 存储XSS:攻击者将恶意代码存储在目标网站的数据库中,当其他用户访问该网站时,恶意代码被返回并在用户浏览器中执行。 2. 反射XSS:攻击者构造一个包含恶意代码的URL,并将其发送给目标用户。用户点击链接后,恶意代码从URL中获取并在用户浏览器上执行。 3. DOM-based XSS:攻击者通过修改网页的DOM结构来执行恶意代码,不需要向服务器发送请求。这种类XSS攻击主要基于客户端脚本和DOM文档对象模。 为了防止XSS攻击,开发人员可以采取以下几种措施: 1. 输入验证和过滤:对用户输入的数据进行验证和过滤,确保不允许包含恶意代码。 2. 输出编码:在将数据输出到网页上时,使用适当的编码方式(如HTML实体编码或JavaScript转义)来防止恶意代码的执行。 3. 使用安全的API:避免使用不安全的API,特别是将用户输入作为参数的API。例如,使用textContent替代innerHTML可以防止XSS攻击。 4. 设置HTTP头部:通过设置X-XSS-Protection和Content-Security-Policy头部,可以进一步加强网站的安全性。 请注意,这只是一些常见的防御措施,具体的应对措施还需要根据实际情况和开发框架来确定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值