Javascript安全地使用用户正则表达式

时间:2013-08-04 04:52:54

标签: javascript regex

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

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

3 个答案:

答案 0 :(得分:3)

这不应该导致任何安全错误。更糟糕的是,您使用的是无效的regEx字符串。除非我误解了这个问题。

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

答案 1 :(得分:2)

用户表达 - >相同用户

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

demo

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中的安全和计算密集/不可行表达式将非常复杂。

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

答案 2 :(得分:0)

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

他们可以随心所欲地搞乱他们的机器!除了最糟糕的情况之外,脚本会在他们的浏览器上中断。