5

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

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

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

有什么可能出错?=P

4

2 回答 2

4

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

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

我建议看一下Javascript Expression Evaluator来代替eval

于 2012-08-06T20:19:56.813 回答
2

有什么可能出错?

由于 Javascript 都是客户端,并且您没有向服务器发送或保存任何内容,因此实际上什么都没有。聪明的用户可以通过破坏自己的页面或通过将脚本放入框中来弹出警报来自娱自乐,但他们也可以通过开发人员控制台来做到这一点。只要一切都保持在 Javascript 端,就应该非常安全,并且可以通过简单的页面刷新来修复任何损坏。

尽管如此,经过更多思考,通过至少一种基本方式验证输入以避免副作用似乎是一个好主意和好实践。虽然 OP 询问它是否安全,而不是它是否专业,但似乎值得一提的是,一个坚实、专业的感觉页面应该确保输入只有预期的效果。

于 2012-08-06T20:22:03.333 回答