MySQL / ASP参数化防止注入

时间:2011-09-21 02:42:43

标签: mysql sql asp-classic sql-injection security

  

可能重复:
  Classic ASP SQL Injection Protection

到目前为止,我一直非常幸运,不会让我的网站受到SQL注入攻击,也可能有许多其他方法。

我想知道如何将我的登录查询转换为使用参数,这显然会阻止这种攻击发生。

我的查询实际上非常复杂,所以我将在这篇文章中展示一个简单版本,然后我可以研究转换后的版本,然后尝试将其实现到我以后的真实查询中。

这就是我目前所拥有的(简化),这就是在寻找麻烦:

username = Trim(Request("username"))
password = Trim(Request("password"))

SQL = " SELECT clientID FROM clientAccounts
WHERE username = '"&username&"'AND password = '"&password&"'; "
Set rs = conn.Execute(SQL)

如果有人能够通过参数保护它免受注射影响,我会非常感激。

此致

1 个答案:

答案 0 :(得分:1)

来自http://www.uberasp.net/getarticle.aspx?id=46

SqlConnection objConnection = new SqlConnection(_ConnectionString);
objConnection.Open();
SqlCommand objCommand = new SqlCommand(
   "SELECT * FROM User WHERE Name = @Name AND Password = @Password",
   objConnection);
objCommand.Parameters.Add("@Name", NameTextBox.Text);
objCommand.Parameters.Add("@Password", PasswordTextBox.Text);
SqlDataReader objReader = objCommand.ExecuteReader();
if (objReader.Read())
{
    ...

对于经典ASP,来自http://blog.binarybooyah.com/blog/post/Classic-ASP-data-access-using-parameterized-SQL.aspx

    With oSQLCommand
        .ActiveConnection = oSQLConn
        .CommandText = "SELECT * FROM whatever WHERE field1=@field1"
        'add input parameters
        .Parameters.Append .CreateParameter("field1", adInteger, adParamInput, , iTableIdValue)
    End With
    'run the stored procedure
    oRS.Open oSQLCommand

此外,如果有任何重要的事情,请不要编写自己的登录代码(例如,您可以完全陌生人看到服务器上的所有内容)。它需要花费大量的时间和测试才能做到正确,而且一个人(你)不能合理地希望第一次就做好。