用JavaScript没有输入消毒没有意义吗?

时间:2014-03-11 18:02:59

标签: javascript security

背景:

我一直在寻找一种方法来使用JavaScript清理某些表单输入,以防止表单在包含未列入白名单的字符时被提交。

我基于一个精彩的Stack Overflow answer

来提出这个问题
function allowSubmission(string) {
    return string == string.replace(/[^\w\s]/gi, 'X');
}


var s1 = 'simple string';
var s2 = 'alert(0);';
var s3 = '<nasty>string';

console.log(allowSubmission(s1)); //true
console.log(allowSubmission(s2)); //false
console.log(allowSubmission(s3)); //false

问题

但这不仅仅意味着潜在的攻击者可以关闭JavaScript并提交他们喜欢的地狱吗?或者只是简单地编辑JavaScript并覆盖验证方法以返回true。

问题

所以...用JavaScript没有输入消毒没有意义吗?

3 个答案:

答案 0 :(得分:10)

这仅表示您应始终验证并清理输入服务器端。无论是否在前端检查过。

在JavaScript中执行此操作可以帮助您避免不必要的请求到达后端并增加负载以及改善用户体验,但不应将它们视为安全手段。

当被视为一道防线时,它毫无意义。一般来说,它的用途有很多用途。

答案 1 :(得分:3)

  

但这不仅仅意味着潜在的攻击者可以关闭javascript并提交他们喜欢的地狱吗?或者只是简单地编辑javascript并覆盖验证方法以返回true。

是的,但这并没有使javascript验证毫无意义。

javascript验证的目的是来清理服务器的输入。该作业必须由服务器处理。

javascript验证的目的是使用户界面对用户更具响应性。 JavaScript验证允许用户知道何时犯了错误而无需等待可能缓慢的服务器响应。它还可以减少服务器上的总体负载。

永远不应将客户端JavaScript用作清理输入的唯一方法,它可用于协助服务器,但最终服务器必须能够正确处理无效输入。

答案 2 :(得分:2)

输入清理不是为了安全,而是为了可用性。您应该尽快(在每次击键时)向用户反馈他输入错误字符,而不是在他提交表单并且响应从服务器返回后。

为了安全起见,您必须验证来自服务器上客户端的任何内容。没有办法解决它。