weixin_50296619 2024-05-20 05:43 采纳率: 0%
浏览 10

xss攻击 求找代码里正则表达式的漏洞

求各位帮忙找一下下面正则表达式的漏洞。

const regex = /(?<=[?&])([^?&#]+)/g;

const allowedSequence = /^content=[0-9a-zA-Z\s]*$/g;

const valueExpression = /(?<=content=)([^?&#]+)/g;

只有符合以上三条的参数才会被传递到html里。麻烦帮我看看是否有可行的地方。谢谢!

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-20 05:43
    关注

    引自免费微信小程序:皆我百晓生

    在分析这个正则表达式时,我们需要确保它能有效阻止XSS(跨站脚本)攻击。以下是每个正则表达式的作用和可能存在的问题:

    1. /(?<=[?&])([^?&#]+)/g: 这个正则表达式用于从查询字符串中提取参数。它匹配任何紧跟在?&之后,且不是?&#的字符序列。
    2. /^content=[0-9a-zA-Z\s]*$/g: 这个正则表达式检查名为content的参数值是否只包含数字、字母和空格。
    3. /(?<=content=)([^?&#]+)/g: 这个正则表达式用于从content参数值中提取内容部分,即content=后面的值。

    潜在的安全风险:

    • 第一个正则表达式可能会允许恶意用户通过URL注入额外的参数,例如:http://example.com/?param1=value&param2=value&script=alert('XSS')
    • 第二个正则表达式仅限制了content参数的值为数字、字母和空格,但并没有阻止HTML特殊字符或JavaScript代码。
    • 第三个正则表达式与第二个正则表达式相似,它只是提取content参数的值,没有对这些值进行进一步的验证。

    为了更好地防止XSS攻击,我们可以改进正则表达式或采用其他方法来处理参数。这里提供一种可能的解决方案,使用JavaScript的内置函数encodeURIComponent来编码参数值,并在HTML中正确转义它们。

    首先,修改第一个正则表达式,确保不会注入额外的参数:

    const regexParams = new RegExp(/(?:^|&amp;|&)([^=&amp;]+)=([^&amp;]*)/g);
    

    然后,创建一个函数来处理参数并将其安全地插入HTML:

    function sanitizeAndInsertParams(params, html) {
      let encodedHtml = html;
      
      // 遍历所有匹配的参数
      for (const match of regexParams.execAll(params)) {
        const key = decodeURIComponent(match[1]);
        const value = decodeURIComponent(encodeURIComponent(match[2])); // 使用encodeURIComponent对值进行二次编码
    
        if (key === 'content' && /^[0-9a-zA-Z\s]+$/.test(value)) {
          encodedHtml = encodedHtml.replace(new RegExp(`(${key}=)[^&]*(?:&|$)`), `$1${value}`);
        }
      }
    
      return encodedHtml;
    }
    

    现在,你可以这样使用这些函数来处理参数并将其添加到HTML中:

    const params = "param1=value&content=test%20content";
    const html = "<div id='target'>Hello, world!</div>";
    
    const sanitizedHtml = sanitizeAndInsertParams(params, html);
    
    console.log(sanitizedHtml); // <div id='target'>Hello, world!&lt;script&gt;alert('XSS')&lt;/script&gt;</div>
    

    这段代码将确保参数值被正确转义,从而防止XSS攻击。但是,请注意,这种方法并不能完全保护你免受所有类型的XSS攻击,尤其是DOM-based XSS。对于更全面的防御,你需要结合其他安全措施,比如在输出HTML时始终使用模板引擎或内建的转义功能。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月20日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?