Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
有一个 Web 服务,它公开了一个名为 A() 的函数。用户可以通过参数向该方法发出请求。并且该参数用作存储过程的输入。
例如,用户使用 url 发出请求:
并且该参数在这样的存储过程中使用:
但是,该代码有一个安全漏洞,因为方法 A() 不会过滤 Code 变量中的任何危险字符。它必须清理输入。
在这种情况下,我该如何清理输入?我目前只是删除了一些字符,但我不确定代码是否真的删除了任何 SQL 注入的可能性。
你有什么想法?
不要试图清理输入;改用参数化查询。
例如,假设 C#:
using (var connection = new SqlConnection("...")) using (var command = new SqlCommand("SELECT * FROM Table WHERE Code = @Code", connection)) { command.Parameters.AddWithValue("@Code", code); ... }