[有一天,我与一位朋友谈论他的一个小Flash游戏服务器应用程序。服务器与mysql数据库通信。我找到了这个请求:
"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("'")
最终阻止您进行'
注射?
编辑:我已经阅读了following question,但是我的方法特定于Split方法,并且不仅适用于SQL数据库,换句话说,我的问题是:
var.split('c')
真的防止c出现在最终字符串中吗?
仍然很危险。当然,这取决于SQL变体。反斜杠通常是一个转义符。容易将\x27
(如果可行)用于撇号;但如果注入的字符串以反斜杠结尾,则已经可能造成严重破坏。
'ʼ; DROP TABLE myTable-'
在某些情况下,Unicode转换可能会用单引号引起来,因为您只用空字符串显式替换了单双引号字符的一种表示形式(这就是split的作用..]
请参阅:https://siderite.dev/blog/why-doubling-single-quotes-is-not.html