危险字符注入的参数化策略


-2

我有一个用于接受电子邮件ID的输入文本字段。如果用户没有输入电子邮件ID, 我有一个客户端验证使用Java脚本来显示错误消息,其中 的读取类似于“请输入有效的电子邮件ID”。代码如下,

if(EmailIdIsNull) 
{ 
    error = "Please enter valid email id"; 
    //Submit this error message to the form 
} 

这种处理检查的方式容易受到危险字符注入的影响。 对于例如,一个改变了“请输入有效电子邮件ID”到“%[email protected]%3ECIMG+SRC%3D.html%22%3E”

该解决方案被给出,

"If available, use structured mechanisms that automatically enforce the separation 
between data and code. These mechanisms may be able to provide the relevant quoting, 
encoding and validation automatically, instead of relying on the developer to provide 
this capability at every point where output is generated" 

我正在寻找上述解决方案的解释。另外,在我的情况下,如何应用以上解决方案 关于电子邮件ID的客户端检查?

  0

也许这只是我,但我不知道你在问什么。 09 8月. 132013-08-09 09:41:47

  0

@Svetlana我正在寻找一个解释,“如果可用,使用自动执行分离的结构化机制......”我在我的问题中提到.. 09 8月. 132013-08-09 09:47:43

  0

引用的可能来源:http:// cwe .mitre.org/data/definitions/116.html(@Svetlana) 09 8月. 132013-08-09 09:58:59

+1

你能解释一下为什么你认为你的代码容易受到注入攻击?据我所知,没有任何地方注入用户数据。 09 8月. 132013-08-09 10:03:27

  0

我认为你的疑问应该更好地解释。那句话有什么问题? 09 8月. 132013-08-09 10:04:35

  0

@VikasV Nope,仍然是一个坏问题。你没有正确解释你的问题。你怕什么呢?你正在谈论某人改变“请输入有效的电子邮件ID”到其他字符串,他们将如何做到这一点?我不是唯一一个难以破译你的问题的人。 09 8月. 132013-08-09 10:09:56

  0

@Perseids +1为您的评论。我认为你是唯一了解这个问题的真正问题的人。 09 8月. 132013-08-09 10:29:13

  0

我不确定我的代码如何容易受到注入攻击。我的网站上有一个安全工具的渗透测试报告了这一点。给出的解决方案是,“如果可以的话,使用自动执行分离的结构化机制......”我无法理解这是什么意思。我正在寻找该声明的解释.. 09 8月. 132013-08-09 10:49:18

2

首先,你应该从来没有依靠客户端代码进行任何形式的验证。绕过客户端的任何验证是微不足道的。

相反,你应该总是消毒和逃避服务器端的任何输入。当然,您可以执行客户端验证以确保良好的用户体验,但始终也会在您的服务器上验证

我认为电子邮件地址将被写入数据库的某处。在这种情况下,请使用parameterized查询而不是动态SQL。这将保护你免受SQL注入攻击。输出时应该避开数据以防止XSS攻击。来自OWASP的XSSSQL injection预防备忘单在这里是一个有用的参考。

  0

你可以编辑你的答案,并提供解释“如果可用,使用自动执行分离.......”的结构化机制,这是我在我的问题中提到的.. 09 8月. 132013-08-09 09:48:42

+1

@VikasV参数化查询** IS **强制从数据中分离代码。我建议你阅读我答案中的链接。 09 8月. 132013-08-09 09:49:38

  0

-1尽管问题本身写得很差,并没有很好地描述问题,但你的回答与问题无关。而且,这不是代码与数据分离的意思。 09 8月. 132013-08-09 09:53:30


1

参数化查询或prepared statements是“自动实施数据和代码分离的机制”的示例。

没有separation between data and code时的问题是用户引入的数据可能被注入代码中,并且可能以程序员未曾想到的方式操作应用程序。

对于“自动提供相关引用,编码和验证”的其他机制,您可以搜索有关OWASP ESAPIJava Spring Security Framework的信息。

不依赖开发人员在产生输出的每个点上都提供这种功能的建议是因为如果你依赖人类可能会产生错误。如果您使用集中式API,使程序员不可能错过输入验证,那么您将更安全。