gpt4 book ai didi

sql - sql 注入(inject)攻击是否只是对具有表单的页面的威胁?

转载 作者:行者123 更新时间:2023-12-04 02:41:33 25 4
gpt4 key购买 nike

我知道这是一个简单的问题,但在我读过的所有内容中,我从未见过具体说明这一点。

如果在页面上做查询,是否需要担心 SQL 注入(inject)攻击?还是仅当您要求用户输入时才有问题?

谢谢!

最佳答案

您不必有用户输入即可遭受 SQL 注入(inject)攻击。

假设您有一个使用如下 URL 调用的产品页面:

product.aspx?ID=123

在您的代码中,您构建了一个查询,如下所示:
string sql = "SELECT * FROM Products WHERE ID = " + Request.Querystring["ID"];

有人可以使用此 url 调用您的页面:
product.aspx?ID=123;DROP Table Students;

和bam,你刚刚被拥有。

除了可以通过用户、查询字符串、帖子、cookie、浏览器变量等传递的任何内容之外。我认为始终使用参数只是一个好习惯,即使您的代码中有文字。例如:
if(SomeCondition)
{
sql = "Select * from myTable where someCol = 'foo'";
}
else
{
sql = "Select * from myTable where someCol = 'bar'";
}

这可能是注入(inject)安全的,但您的 RDBMS 会将它们缓存为两个不同的查询。
如果你修改它:
sql = "Select * from myTable where someCol = @myParam";
if(SomeCondition)
{
myCommand.Parameters.Add("@myParam").value = "foo";
}
else
{
myCommand.Parameters.Add("@myParam").value = "bar";
}

您获得了相同的结果,但 RDBMS 只会将其缓存为一个查询,在运行时替换参数。我使用它作为经验法则总是使用参数化查询,只是为了保持一致,更不用说轻微的缓存改进了。

关于sql - sql 注入(inject)攻击是否只是对具有表单的页面的威胁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1716979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com