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

即使'字符被删除,有没有办法注入SQL?

如何解决《即使'字符被删除,有没有办法注入SQL?》经验,为你挑选了4个好方法。

如果从SQL查询中删除所有'字符,还有其他方法对数据库进行SQL注入攻击吗?

怎么做到呢?谁能举个例子?



1> Johan..:

就在这里.来自维基百科的摘录

"SELECT * FROM data WHERE id = " + a_variable + ";"

从该陈述中可以清楚地看出,作者希望a_variable是与"id"字段相关的数字.但是,如果它实际上是一个字符串,那么最终用户可以按照他们的选择操纵该语句,从而绕过对转义字符的需要.例如,将a_variable设置为

1;DROP TABLE users

将从数据库中删除(删除)"users"表,因为SQL将呈现如下:

SELECT * FROM DATA WHERE id=1;DROP TABLE users;

SQL注入并不是一种简单的攻击方式.如果我是你,我会做非常仔细的研究.



2> Raithlin..:

是的,取决于您使用的声明.您最好通过使用存储过程或至少参数化查询来保护自己.

有关预防样本,请参阅WikiPedia.



3> Veynom..:

是的,这是绝对可能的.

如果你有一个表单,你希望一个整数来做你的下一个SELECT语句,那么你可以输入类似的东西:

SELECT*FROM thingyWHERE attributeID =

5(答案很好,没问题)

5; DROP表users; (坏,坏,坏......)

以下网站详细介绍了经典的SQL注入技术:SQL注入备忘单.

使用参数化查询或存储过程并不是更好.这些只是使用传递参数的预制查询,也可以是注入源.本页还对此进行了描述:在SQL中攻击存储过程.

现在,如果你压制简单的引用,你只能防止一组特定的攻击.但不是全部.

与往常一样,不要相信来自外部的数据.在以下3个级别过滤它们:

显而易见的东西的接口级别(下拉选择列表优于自由文本字段)

与数据性质(int,字符串,长度),权限相关的检查的逻辑级别(此用户可以在此页面使用此类数据)...

数据库访问级别(转义简单引用...).

玩得开心,别忘了查看WikiPedia的答案.

/维伊



4> GvS..:

我建议你将变量作为参数传递,而不是构建自己的SQL.否则,总会以一种方式进行SQL注入,这是我们目前不知道的方式.

您创建的代码是这样的:

' Not Tested
var sql = "SELECT * FROM data WHERE id = @id";
var cmd = new SqlCommand(sql, myConnection);
cmd.Parameters.AddWithValue("@id", request.getParameter("id"));

如果你有一个像我这样的名字.所有'-characters被删除或标记为无效是非常烦人的.

您还可以查看有关SQL注入的Stackoverflow问题.

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