Angularjs:如何限制包含sql查询关键字的用户输入(用于sql注入)

时间:2014-07-02 10:16:02

标签: javascript sql angularjs sql-injection

我在AngularJs项目中有登录和其他形式的要求,限制用户输入包含输入字段中的“SELECT”,“INSERT”,“UPDATE”,DELETE“,”DROP“等特定关键字。这将帮助我们防止SQL注入攻击。

如果我们有任何angularjs库来完成此任务,请告诉我。或者如何使用angularjs有效地实现这一目标?

感谢。

1 个答案:

答案 0 :(得分:2)

  1. 黑名单不是安全的答案。如果你检查单词“select”,攻击者将注入“sElEct”或“sel / ** / ect”(在MySQL中)。如果您使用空格分割单词,攻击者将使用注释(“/ ** /”)或制表符作为分隔符。你永远不能用黑名单方法获胜(特别是你建议的整个单词),总是使用白名单方法,只允许允许的字符(例如a-z,A-Z,0-9)。

  2. 任何客户端验证都必然会失败。攻击者可以使用任何简单的代理(如fiddler或burp)轻松攻击任何基于Javascript的“防御”。您应该在服务器端代码中实现白名单输入验证以及参数化查询或其他一些最佳实践,以防止DAL级别的SQL注入(两者都在一起推荐)。