1
234
PreparedStatements是前进的道路,因为它们使SQL注入变得不可能。下面是一个简单的例子,以用户的输入作为参数:
无论名称和电子邮件中包含哪些字符,这些字符都将直接放在数据库中。它们不会以任何方式影响INSERT语句。
对于不同的数据类型,有不同的设置方法——您使用哪种方法取决于您的数据库字段是什么。例如,如果数据库中有整数列,则应使用
|
2
45
防止SQL注入的唯一方法是使用参数化SQL。根本不可能建立一个比那些以黑客SQL为生的人更聪明的过滤器。 因此,对所有输入、更新和where子句使用参数。动态SQL只是黑客的一扇大门,它在存储过程中包含了动态SQL。参数化,参数化,参数化。 |
3
33
如果你真的不能使用 Defense Option 1: Prepared Statements (Parameterized Queries) 或 Defense Option 2: Stored Procedures ,不要构建自己的工具,使用 OWASP Enterprise Security API . 从 OWASP ESAPI 托管于谷歌代码:
有关详细信息,请参阅 Preventing SQL Injection in Java 和 SQL Injection Prevention Cheat Sheet . 特别注意 Defense Option 3: Escaping All User Supplied Input 介绍了 OWASP ESAPI 项目)。 |
4
18
(这是对OP在原始问题下的评论的回应;我完全同意PreparedStatement是此工作的工具,而不是Regex。)
当你说
要匹配输入中的一个反斜杠,可以在regex字符串中放置四个反斜杠。要在输出中放一个反斜杠,可以在替换字符串中放四个。假设您正在以Java字符串文字的形式创建正则表达式和替换项。如果您以任何其他方式创建它们(例如,通过从文件中读取它们),则不必执行所有的双重转义。 如果输入中有换行符,并且希望用转义序列替换它,则可以使用以下命令对输入进行第二次传递:
或者你想要两个反斜杠(我不太清楚):
|
5
13
准备声明在大多数情况下都是可行的,但不是所有情况。有时,您会发现自己处于这样一种情况:查询或其一部分必须作为字符串进行构建和存储,以供以后使用。退房 SQL Injection Prevention Cheat Sheet 上 OWASP Site 有关不同编程语言的更多详细信息和API。 |
6
9
使用正则表达式删除可能导致SQL注入的文本,听起来就像是通过
首先,防止SQL注入的最简单方法之一是使用
更多信息, Using Prepared Statements 从 The Java Tutorials 会是一个很好的开始的地方。 |
7
7
准备好的语句是最好的解决方案,但是如果确实需要手动执行,也可以使用
|
8
6
如果你正在处理一个遗留系统,或者你有太多的地方可以切换到
|
9
6
您需要下面的代码。乍一看,这可能看起来像我编的任何旧代码。但是,我所做的是查看 http://grepcode.com/file/repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.31/com/mysql/jdbc/PreparedStatement.java .然后,我仔细地查看了setString的代码(int-parameterindex,string x),找到了它转义的字符,并将其定制为我自己的类,以便它可以用于您需要的目的。毕竟,如果这是Oracle逃避的字符列表,那么知道这是一个真正令人欣慰的安全明智之举。也许Oracle需要添加一个类似于下一个主要Java版本的方法。
|
10
0
在搜索了大量的解决方案以防止SQL注入后,如果遗留系统不能在每一个地方应用准备好的语句。 java-security-cross-site-scripting-xss-and-sql-injection topic 是解决办法吗 我尝试了@Richard的解决方案,但在我的案例中没有起作用。 我用过滤嘴
|
11
0
来源:[来源]
} |
cagta · 如何使用此python脚本避免硬编码sql表达式? 6 年前 |
John · MySQL php查询缺陷 6 年前 |
Arunabh · 在不使用预处理语句的情况下摆脱SQL注入 7 年前 |