在这种受限制的设置中,eval()会导致安全问题吗?

jos*_*lvo 5 javascript security

我正在写一个包含一些数学练习的网站.如果用户试图作弊,我不在乎,所以我通过Javascript纠正答案

在我的具体情况下,我有一个表格中的字段.我想允许用户输入数学表达式(比如3/2)并使用其结果来判断用户是否正确.为此,我使用eval.

我的javascript永远不会直接从URL中读取,只能从表单中读取.此页面的任何结果都不会存储以供任何用户显示(也许我们稍后会保留统计分析的结果,然后通过PHP存储在数据库中,但话又说回来,我可能需要清理PHP本身的任何输入,因担心用户直接使用POST)

什么都不会出错?= P

Aus*_*tin 4

您需要确保没有任何非法内容会进入eval可能破坏脚本的内容(这可能是有意或无意的 - 不是攻击而是用户错误)。我想说,要么在 eval 之前验证该字段,以确保它是算术的,并且仅此而已。

无论用例如何,eval通常在任何编程语言中都被普遍认为是一种糟糕的做法。当然,这里没有真正的安全问题,但干净可靠的代码是有价值的。

我建议查看Javascript Expression Evaluator来代替eval

  • 我认为这不是问题的答案,但绝对值得一看,因为有更好的运营商支持 (2认同)