当前位置:  开发笔记 > 数据库 > 正文

sql注入攻击只对具有表单的页面构成威胁吗?

如何解决《sql注入攻击只对具有表单的页面构成威胁吗?》经验,为你挑选了1个好方法。

我知道这是一个简单的问题,但在我读过的所有内容中,我从来没有见过这个具体的拼写.

如果您在页面上进行查询,是否需要担心SQL注入攻击?或者,当您要求用户输入时,这只是一个问题吗?

谢谢!



1> Neil N..:

您不必让用户输入遭受SQL注入攻击.

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

product.aspx?ID=123

在您的代码中,您有一个构造如下的查询:

string sql = "SELECT * FROM Products WHERE ID = " + Request.Querystring["ID"];

有人可以使用此网址调用您的网页:

product.aspx?ID=123;DROP Table Students;

而且,你刚刚过去了.

除了可以通过用户,查询字符串,帖子,cookie,浏览器变量等传递的ANYTHING之外,我认为总是使用参数也是一种好习惯,即使你的代码中有文字也是如此.例如:

if(SomeCondition)
{
    sql = "Select * from myTable where someCol = 'foo'";
}
else
{
    sql = "Select * from myTable where someCol = 'bar'";
}

这可能是注入安全的,但您的RDBMS会将它们缓存为两个不同的查询.如果你把它改为:

sql = "Select * from myTable where someCol = @myParam";
if(SomeCondition)
{
   myCommand.Parameters.Add("@myParam").value = "foo";
}
else
{
   myCommand.Parameters.Add("@myParam").value = "bar";
}

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

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有