gpt4 book ai didi

security - SQL 注入(inject),即使在转义引号时也是如此

转载 作者:行者123 更新时间:2023-12-05 08:27:45 25 4
gpt4 key购买 nike

我正在想办法解决以下问题,因为看起来有人这样做了,我想修复它。但是,在用 OWASP Recommendation 之类的东西修复它之前,我真的很想了解攻击是如何工作的。

    Set conn = Server.CreateObject("ADODB.Connection")
conn.open xDb_Conn_Str
sSql = "SELECT * FROM [User]"
sSql = sSql & " WHERE [Username] = '" & CleanSql(sUserId) & "'"
Set rs = conn.Execute(sSql)

CleanSql -

Function CleanSql(str)

Dim sWrk

sWrk = Trim(str&"")
sWrk = Replace(sWrk, "'", "''") ' Adjust for Single Quote

sWrk = Replace(sWrk, "[", "[[]") ' Adjust for Open Square Bracket

CleanSql = sWrk

End Function

这里明显转义了单引号。

紧接着它会检查是否发现用户使用以下内容验证密码:

If UCase(rs("Password")) = UCase(sPassWd) Then
DoStuff()

感谢任何帮助。

最佳答案

既然听起来您已经意识到准备好的/参数化语句的好处,我就不多说了。您似乎只是好奇您现有的应用程序是如何被破坏的。

一个简单的\'; drop table users -- 可以打败你的报价倍增。您的 CleanSql() 函数会将它变成:

\'' ; drop table users --

您的 SQL 语句将变为:

... WHERE [Username] = '\'' ; drop table users --'

并且由于 '\'' 是一个有效值(转义单引号),您的 where 子句实际上结束了。 ; 开始一个新命令并且 -- 有效地注释掉结束引号。 drop table 可以是任何东西... update users set password=...insert into users values () 或任何攻击者想要的东西跑。

关于security - SQL 注入(inject),即使在转义引号时也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32263865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com