相关疑难解决方法(0)

此代码是否会阻止SQL注入?

背景

我已经签约分析现有的数据提供者,我知道以下代码有问题; 但是为了指出它有多糟糕,我需要证明它易受SQL注入的影响.

什么"Key"参数可以破坏PrepareString函数并允许我执行DROP语句?

代码片段

Public Shared Function GetRecord(ByVal Key As String) As Record
    Dim Sql As New StringBuilder()

    With Sql
        .Append("SELECT * FROM TableName")
        If String.IsNullOrEmpty(Agency) Then
            .Append(" ORDER BY DateAdded")
        Else
            .Append(" WHERE Key = '")
            .Append(PrepareString(Key))
            .Append("'")
        End If
    End With

    Return ExecuteQuery(Sql.ToString())
End Function

Public Shared Function PrepareString(ByVal Value As String) As String
    Return Value.Replace("''", "'") _
                .Replace("'", "''") _
                .Replace("`", "''") _
                .Replace("´", "''") _
                .Replace("--", "")
End Function
Run Code Online (Sandbox Code Playgroud)

.net sql vb.net sql-server sql-injection

16
推荐指数
2
解决办法
8794
查看次数

必须转义哪些字符才能阻止(我的)SQL注入?

我正在使用MySQL API的功能

mysql_real_escape_string()
Run Code Online (Sandbox Code Playgroud)

根据文档,它会转义以下字符:

\0
\n
\r
\
'
"
\Z
Run Code Online (Sandbox Code Playgroud)

现在,我查看了OWASP.org的ESAPI安全库,在Python端口中,它有以下代码(http://code.google.com/p/owasp-esapi-python/source/browse/esapi/codecs/mysql. py):

        """
        Encodes a character for MySQL.
        """
        lookup = {
        0x00 : "\\0",
        0x08 : "\\b",
        0x09 : "\\t",
        0x0a : "\\n",
        0x0d : "\\r",
        0x1a : "\\Z",
        0x22 : '\\"',
        0x25 : "\\%",
        0x27 : "\\'",
        0x5c : "\\\\",
        0x5f : "\\_",
        }
Run Code Online (Sandbox Code Playgroud)

现在,我想知道是否真的需要转义所有这些角色.我理解为什么%和_在那里,它们是LIKE运算符中的元字符,但我不能简单地理解他们为什么添加退格和制表符字符(\ b\t)?如果您执行查询,是否存在安全问题:

SELECT a FROM b WHERE c = '...user input ...';
Run Code Online (Sandbox Code Playgroud)

用户输入包含制表符或退格符的位置?

我的问题是:为什么它们在ESAPI安全库中包含\ b\t?在任何情况下你可能需要逃避这些角色吗?

mysql security escaping character

15
推荐指数
2
解决办法
6万
查看次数

标签 统计

.net ×1

character ×1

escaping ×1

mysql ×1

security ×1

sql ×1

sql-injection ×1

sql-server ×1

vb.net ×1