0

我想安全地使用用户输入的正则表达式来解析文本。我不想使用沙箱或任何东西。我可以将正则表达式插入String.match还是会导致问题?如果不是,如何避免这种情况?

用例是具有大量文本的作家的用例。作者将使用各种正则表达式转换该文本。其他用户将运行该作者的正则表达式以获得预期的输出。

4

3 回答 3

3

这不应导致任何安全错误。更糟糕的情况是您使用了无效的正则表达式字符串。除非我误解了这个问题。

编辑更糟糕的情况是锁定您自己的浏览器。感谢 Anirudh 提出这一点。

于 2013-08-04T04:58:43.880 回答
2

用户表达式 -> 相同用户

如果您在字符串中有用户输入,则可以将其直接传递给构造函数。

演示

var s = "This is my text";

$('input#expression').keyup(function(){
    var e = new RegExp($(this).val());
    $('#match').text(
        JSON.stringify(s.match(e))
    );
}).trigger("keyup");

它比eval. 据我所知,没有任何安全问题。如果有的话,很可能是浏览器中的一个错误。

用户表达 -> 其他用户

正如评论中所指出的,在 JavaScript 中区分安全和计算密集/不可行的表达式将非常复杂。

如果您不相信用户玩得很好,请不要让他们在彼此的计算机上运行表达式。至少,在需要刷新页面的情况下,确保保存用户数据,并且在用户未明确调用它们的情况下不要运行它们。

于 2013-08-04T05:01:36.163 回答
0

如果您使用的是 Javascript,它会在他们的机器上运行 - 因此不涉及沙箱。

他们可以随意弄乱他们的机器!除了可能发生的最糟糕的情况是脚本在他们的浏览器上中断。

于 2013-08-04T04:59:23.340 回答