Mysql SQL参数-在何处使用

Mysql SQL参数-在何处使用,mysql,sql,database,parameters,Mysql,Sql,Database,Parameters,我正在将SQL参数应用到我的项目中,以防止SQL注入 我是否向应用程序中的每个查询添加参数,包括没有任何用户交互的查询 例如,如果我的用户想要搜索关键字并提交一个文本字段。我已经将参数化方法添加到使用该关键字的查询中,以阻止用户添加恶意内容。但在这个查询下面是另一个查询,它从顶部搜索中获取关键字ID,并在其他地方运行它自己的小查询 这让我很困惑,我是否也向这个查询添加了parameter方法,即使关键字ID不是来自用户 非常感谢是的,在任何有参数的地方使用参数化查询 今天没有用户输入用于特定查询

我正在将SQL参数应用到我的项目中,以防止SQL注入

我是否向应用程序中的每个查询添加参数,包括没有任何用户交互的查询

例如,如果我的用户想要搜索关键字并提交一个文本字段。我已经将参数化方法添加到使用该关键字的查询中,以阻止用户添加恶意内容。但在这个查询下面是另一个查询,它从顶部搜索中获取关键字ID,并在其他地方运行它自己的小查询

这让我很困惑,我是否也向这个查询添加了parameter方法,即使关键字ID不是来自用户


非常感谢

是的,在任何有参数的地方使用参数化查询

今天没有用户输入用于特定查询的事实并不意味着明天会是一样的。代码更改。也许一个恶意用户会想出如何破坏第一个查询和第二个查询


你应该考虑一下。

是的,这也应该是一个参数。否则,您必须跟踪插入到数据库中的值来自用户-没有任何东西可以阻止使用“';DROP DATABASE”的名称。如果您盲目地相信数据库中的数据会被清理,那么在某个时候您肯定会出错

比如:

SELECT Rows FROM TABLE2 WHERE KeywordId = (
   SELECT KeywordId FROM TABLE1 WHERE UserInput = @u
)
可以,因为您的SQL引擎将在内部使用参数。逻辑是这样的:

var keywordId = sql_exec("SELECT KeywordId FROM Table1 WHERE UserInput = @u", userInput);
var rows = sql_exec("SELECT Rows FROM Table2 WHERE KeywordId = '" + keywordId + "'");

这是不正确的,因为应用程序没有将参数用于外部和变量输入。

+1“在任何有参数的地方使用参数化查询”。不可能是SimpleHere的Jeff Atwood:请一致使用占位符(阅读:everywhere)。谢谢!:)