【问题标题】:Does the query builder prevent SQL Injection?查询生成器是否阻止 SQL 注入?
【发布时间】:2015-06-04 19:34:31
【问题描述】:

大家好,我目前在 ASP.NET 中使用查询生成器在我在 App_Code 文件夹中创建的一些数据集上创建选择、插入、更新查询等。我已经意识到您在查询中使用参数时必须使用“?”像这样

SELECT * FROM users WHERE email = ?

我想知道的是,这是否真的可以保护您的表免受 sql 注入,或者您是否需要在代码中执行更多操作以保护查询?

【问题讨论】:

    标签: c# mysql asp.net visual-studio-2010 ms-access


    【解决方案1】:

    参数化查询接受参数并将它们作为适当的 SQL 数据类型输入。所以例如创建这个过程

    CREATE PROCEDURE GetStudent (IN LN VARCHAR(200))
      BEGIN
        SELECT Name FROM Students WHERE LastName = LN;
      END
    

    并传递此值(假设这是在您的 C# 代码中。

    "'Bobby'; DROP TABLE STUDENTS;"
    

    基本上会执行这个查询

    SELECT Name FROM Students WHERE LastName ='''Bobby;''DROP TABLE Students'
    

    这是相当安全的。

    当然,您必须适应您的特定应用程序需求,但一般来说,参数化查询对所有主要 RDMS 的 SQL 注入都是安全的。

    【讨论】:

    • 嗨尼克感谢您的回复,但您的建议似乎不起作用:(但我的查询方式仍然对 sql 注入无效?
    • 我像你一样设置了查询,如果我创建它时也没有返回任何内容,我收到一条警告,告诉我语法无效
    猜你喜欢
    • 2011-12-27
    • 2020-04-26
    • 1970-01-01
    • 2015-08-24
    • 2017-04-09
    • 2014-12-27
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多