这个简单的字符串转义可以防止任何SQL注入吗?

星云

我在一家公司工作,该公司负责数据库模块的人员严格禁止使用准备好的语句。我担心他的实施不安全。

这是我们当前用于进行SQL查询的代码(带有JDBC / MySQL 5.5的Java 8应用程序):

String value = "Raw user input over HTTP-Form";
String sql = "SELECT * FROM db1.articles WHERE title like '" + 
replaceSingleQuotes(value) + "'";
executeSQL(sql);

public static String replaceSingleQuotes(String value) {
  value = value.replaceAll("\\\\", "\\\\\\\\");
  return value.replaceAll("'", "\\\\'");
}

我无法进行任何注射,但他的解决方案对我来说似乎非常棘手。任何人都可以指出如何避免这种转义吗?如果我无法解决任何问题,他将不会替换他的代码,并且我们在应用程序(银行业务)中拥有成千上万客户的非常敏感的信息。

编辑:不幸的是,我无法显示executeSQL(),因为有一个庞大的类层次结构,一团糟,而且一切都很分散。但这归结为这样的事情:

String query = ... // query escaped with the above function
java.sql.Connection connection = ...
Statement stmt = connection.createStatement();
stmt.executeUpdate(query);
查尔拉卡

攻击的一种方法是“加载”攻击。

首先,您将银行转帐消息作为用户名注入其中

传输0.01
到:02020.020202.200202
名称:johnny table'; drop table foob​​ar-

会逃到

johnny tables\';drop table foobar  --

到现在为止还挺好。有效的保护。我们的附加失败。我们尝试加载攻击。

现在,我们要安排一个预定的付款订单。

假设发生一个常见错误,该错误一旦插入数据库,便是“安全的”,因为已经对其进行了一次检查。

转移0.01
到:02020.020202.200202
名称:johnny table'; drop table foobar--
时间表:从现在开始1天

将订单存储在数据库中

'johnny tables\';drop table foobar--'

将存储为

johnny table'; drop table foobar--

现在,在午夜,计划程序启动并开始迭代计划的付款

select name from scheduled where time > x and < y

所以银行代码开始崩溃

String name = result['name'];
String acct = result['acct'];
String amt = result['amt'];
string query = "insert into payment_process (name,acct,amt) values('"+name+"','"+acct+"','"+amt+"');

和繁荣,你的桌子掉了。 *

当您走手工路线时,必须确保变量的每个实例都被转义,所有unicode字符都被考虑了,数据库引擎的所有惯性都被考虑了。

同样,使用准备好的语句可以大大提高速度,因为您不必重建查询。您只需构建一次,将它们存储在缓存中,然后换出参数即可。
尤其是在迭代大型列表时,它们是天赐之物。

问题的根源在于,他可能不明白预处理语句,并没有得到他们,他们是如何工作的。引发不安全感可能会以某种方式进行侵略和保护,甚至是狂热,只是为了防止您不知道它们是如何工作的。
尝试与他谈谈,如果他不想听原因,去找他的经理并解释问题,如果网站/应用程序被黑客入侵,它将在您的同事和您的头上经理,告诉他风险很大。指出最近的黑客攻击,其中有很多钱像快速黑客一样被盗。

* 可能无法实际运行,具体取决于实际查询,联接,联合等。这是一个非常简单的示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java-转义字符串以防止SQL注入

C#字符串参数可以防止注入?

PetaPoco的Query(字符串查询,参数)方法是否可以防止SQL注入?

这个准备好的语句可以防止SQL注入吗?

传递键值对还可以防止SQL注入攻击吗?

我可以防止自动将字符串强制转换为XName吗?

这个 RegExp 字符串需要转义吗?

Doctrinepersist()是否可以防止SQL注入?

Querydsl 是否可以防止 SQL 注入

SQLite如何转义值以防止SQL注入

Java和XSS:如何html转义JSON字符串以防止XSS?

es6模板文字可以防止SQL注入吗?

Mysqli登录-使用此代码可以防止SQL注入吗?

JSF标准验证可以防止代码注入吗?

如何防止JAXB转义字符串

Spring中的SimpleJdbcTemplate是否可以防止SQL注入?

Knex.js是否可以防止SQL注入?

Spring Data JPA是否可以防止SQL注入

查询字符串可以包含字符串以外的任何内容吗?

我可以提取包含R中任何字符串向量的字符串吗

在SQL字符串中转义&字符

可以在逐字字符串文字中使用“ Unicode字符转义序列”吗?

字符串的转义顺序在某种程度上重要吗?(HTML和SQL注入)

为什么返回字符串切片而不是usize可以防止对String进行突变?

我可以将C#字符串值转换为转义的字符串文字吗

bash可以将带引号和/或转义的字符串变量扩展为单词吗?

防止元帅在结构的字符串字段中转义引号

如何防止RestSharp双重转义包含引号的字符串?

如何防止API返回指数增长的转义字符串?