String.split()函数安全吗?

问题描述 投票:2回答:2

[有一天,我与一位朋友谈论他的一个小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出现在最终字符串中吗?

java sql security jdbc
2个回答
1
投票

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


1
投票

'ʼ; DROP TABLE myTable-'

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

请参阅:https://siderite.dev/blog/why-doubling-single-quotes-is-not.html

© www.soinside.com 2019 - 2024. All rights reserved.