到目前为止,我一直非常幸运,不会让我的网站受到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)
如果有人能够通过参数保护它免受注射影响,我会非常感激。
此致
答案 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
此外,如果有任何重要的事情,请不要编写自己的登录代码(例如,您可以完全陌生人看到服务器上的所有内容)。它需要花费大量的时间和测试才能做到正确,而且一个人(你)不能合理地希望第一次就做好。