关于java:String.split()函数安全吗?

 2019-10-09 

Is String.split() function safe?

有一天,我和一位朋友谈论了他的一款Flash游戏服务器应用程序。
服务器与mysql数据库通信。我发现了这个要求:

1
"UPDATE phpbb_users SET patojdur = '" + this.score +"' WHERE user_id = '" + this.user_id +"'"

由于this.score是用户输入的数据,因此我问他将数据直接放入SQL请求是否不安全,并冒着SQL注入的风险。

但是他回答我:"不,因为this.score是user_request.split("'")[1],所以拆分保护了我,并且您不能插入'。"

我的问题不是他是否通过这样做做出了正确的选择,因为我知道他不会改变主意,但是他说的话让我对一件事情感到好奇:分开真的很安全吗?是否真的阻止了分割字符通过您的操作?还是有风险,还是放一个var.split("'")最终阻止您进行'注射?

编辑:我已经阅读了以下问题,但我的问题特定于Split方法,并且不仅适用于SQL数据库,换句话说,我的问题是:

var.split('c')是否真的阻止c出现在最终字符串中?


仍然很危险。 当然,这取决于SQL变体。 反斜杠通常是一个转义符。 对于单引号,\x27(如果可行)很容易; 但如果注入的字符串以反斜杠结尾,则已经可能造成严重破坏。


'?; DROP TABLE myTable--'

在某些情况下,Unicode转换可能会用单引号引起来,因为您只用空字符串显式替换了单双引号字符的一种表示形式(这就是split的作用..)

参见:http://siderite.blogspot.com/2013/01/why-doubling-single-quotes-is-not.html