String.split()函数安全吗?

时间:2014-06-17 10:16:43

标签: java sql security jdbc

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

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

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

但他回答我:“不,因为这个。分数是user_request.split("'")[1],分裂正在保护我,你不能把'注入。”

我的问题不在于他是否做出了正确的选择,因为我知道他不会改变主意,但他所说的让我对一件事感到好奇:分裂真的很安全吗?它真的可以阻止分裂的角色通过你做的任何事情吗?或者即使风险很大,最后还是var.split("'")阻止你'注射吗?

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

var.split('c')是否真的阻止c进入最终字符串?

2 个答案:

答案 0 :(得分:1)

''; DROP TABLE myTable - '

有些情况下,Unicode转换可能会在单引号中滑动,因为您只是用空字符串显式替换sincle引用字符的一个表示形式(这就是分裂所做的..)

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

答案 1 :(得分:1)

仍然很危险。当然这取决于SQL变体。反斜杠是标准的逃避。撇号很容易\x27(如果有效);但如果注入的字符串以反斜杠结束,则已经可能造成严重破坏。