带参数的 SELECT 语句 ASP Classic [Duplicate]

select statment asp classic with parameter [duplicate]

提问人:abdo Zurg 提问时间:9/25/2023 最后编辑:user692942abdo Zurg 更新时间:9/25/2023 访问量:61

问:

我正在使用带有 SQL Server 的 ASP Classic,我想更改我的 SQL 语句以防止注入 我的 SQL 语句

这是我的SQL语句,运行正常

%><!--#include file="Config.asp" --><%'  %><!--#include file="Md5.asp"--><%' %>                
<%
                  Dim Encodervalue                                      
                  Dim EncoderResult                                        
                  EncoderValue=Trim(Name)&"_"&Trim(password)
                  EncoderResult=Trim(Name)&"_"&Trim(password)    
                  EncoderResult = Md5(EncoderValue)                       
                  SelectSql="Select * From Users Where User_key='"&EncoderResult&"'"      
              set Rs=ADO.execute (SelectSql)
SQL VBScript ASP-经典

评论

0赞 Senthil P Nathan 9/25/2023
' 清理输入以仅允许字母数字字符和下划线 EncoderResult = Replace(EncoderResult, “'”, “”) ' 删除单引号 ' 构造 SQL 查询 SelectSql = “SELECT * FROM Users WHERE User_key='” & EncoderResult & “'” Set Rs = ADO.执行 (SelectSql)
1赞 user692942 9/25/2023
这回答了你的问题吗?经典 Asp 中的参数化查询
0赞 John 9/25/2023
您似乎在“name”和“password”上使用 MD5 哈希函数。这应该足以处理该特定查询中 Request 变量中的任何注入代码,但一般来说@user692942是正确的。参数化查询是要走的路。但是,如果您担心安全性,我建议您使用比 MD5 更现代、更强大的算法来加密您的登录详细信息。

答:

-1赞 Nandalal Seth 9/25/2023 #1

如果您的 EncoderResult 不会超过 128 个字符,那么您可以使用 sqlservr 内置函数 QUOTENAME,如下所示?它将通过转义输入中的任何引号来生成有效的 SQL Server 字符串。

参考: https://learn.microsoft.com/en-us/sql/t-sql/functions/quotename-transact-sql?view=sql-server-ver16&redirectedfrom=MSDN

SelectSql="Select * From Users Where User_key=QUOTENAME("&EncoderResult&",'''')"   

评论

0赞 abdo Zurg 9/26/2023
谢谢,我可以阻止用户在文本中输入'吗?
0赞 Nandalal Seth 9/27/2023
嗨,@abdoZurg,我认为这将是 UI 验证的一部分。我试图回答如何添加检查,以便SQL语句不处理注入