我想安全地使用用户输入的regexp来解析文本。我不想使用沙箱或任何东西。我可以将正则表达式插入String.match
或者会导致问题吗?如果不是如何避免这种情况?
用例是具有大量文本的作者。作者将使用各种正则表达式对该文本进行转换。其他用户将运行该作者的正则表达式以获得预期的输出。
答案 0 :(得分:3)
这不应该导致任何安全错误。更糟糕的是,您使用的是无效的regEx字符串。除非我误解了这个问题。
编辑更糟糕的情况是锁定您自己的浏览器。感谢Anirudh提出这一点。
答案 1 :(得分: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中的安全和计算密集/不可行表达式将非常复杂。
如果您不相信用户玩得很好,请不要让他们在彼此的计算机上运行表达式。至少,确保在需要刷新页面的情况下保存用户数据,并且如果用户没有明确地调用它们,则不要运行它们。
答案 2 :(得分:0)
如果您使用的是Javascript,则它会在他们的计算机上运行 - 因此不会涉及沙箱。
他们可以随心所欲地搞乱他们的机器!除了最糟糕的情况之外,脚本会在他们的浏览器上中断。