Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询生成器是否阻止SQL注入?_C#_Mysql_Asp.net_Visual Studio 2010_Ms Access - Fatal编程技术网

C# 查询生成器是否阻止SQL注入?

C# 查询生成器是否阻止SQL注入?,c#,mysql,asp.net,visual-studio-2010,ms-access,C#,Mysql,Asp.net,Visual Studio 2010,Ms Access,大家好,我目前正在ASP.NET中使用查询生成器对我在应用程序代码文件夹中创建的一些数据集创建选择、插入、更新查询等。我已经意识到,在查询中使用参数时,您必须使用?像这样 SELECT * FROM users WHERE email = ? 我想知道的是,这实际上是为了保护表不受sql注入的影响,还是为了保护查询,您需要在代码中做更多的工作?参数化查询接受参数并将其作为适当的sql数据类型输入。例如,创建这个过程 CREATE PROCEDURE GetStudent (IN LN VARC

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

SELECT * FROM users WHERE email = ?

我想知道的是,这实际上是为了保护表不受sql注入的影响,还是为了保护查询,您需要在代码中做更多的工作?

参数化查询接受参数并将其作为适当的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'
这是相当安全的


当然,您必须适应特定的应用需求,但总的来说,参数化查询对于所有主要RDM都是安全的,不受SQL注入的影响。

你好,尼克,谢谢你的回复,但你的建议似乎不起作用:但我知道我的查询仍然不受SQL注入的影响吗?我像你一样设置查询,如果在创建查询时没有返回任何内容,我会得到一个警告告诉我语法无效