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

时间:2012-08-06 20:16:50

标签: javascript security

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

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

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

什么可能出错? = P

2 个答案:

答案 0 :(得分:4)

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

无论用例如何,eval通常被认为是任何编程语言中的不良实践。当然,这里没有真正的安全问题,但清洁和可靠的代码是有价值的。

我建议您使用Javascript Expression Evaluator来代替eval

答案 1 :(得分:2)

  

什么可能出错?

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

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