![]() |
1
23
是的,有。摘录 Wikipedia
从这句话中可以清楚地看出,作者打算将一个变量作为一个与“id”字段相关联的数字。但是,如果它实际上是一个字符串,那么最终用户可以根据自己的选择操作语句,从而绕过转义字符的需要。例如,将变量设置为
将从数据库中删除“users”表,因为SQL将按如下方式呈现:
SQL注入是 不 一次简单的战斗。如果我是你,我会做非常仔细的研究。 |
![]() |
3
6
是的,这是绝对可能的。 如果您有一个表单,希望在其中生成下一个select语句的整数,则可以输入类似的内容:
从中选择*
以下网站详细介绍了经典的SQL注入技术: SQL Injection cheat sheet . 使用参数化查询或存储过程并没有更好的效果。这些只是使用传递的参数预先进行的查询,这些参数也可以是注入源。本页还介绍了: Attacking Stored Procedures in SQL . 现在,如果你抑制简单的引用,你只会阻止一组给定的攻击。但不是全部。 一如既往,不要相信来自外部的数据。在这三个级别过滤它们:
玩得开心,别忘了检查 WikiPedia 答案。 /VEY |
![]() |
4
6
我建议您将变量作为参数传递,而不是构建自己的SQL。否则,所有的方法都有一种进行SQL注入的方式,这种方式我们目前还不知道。 您创建的代码如下所示:
如果你有一个像我这样的名字,里面有一个。删除所有'-字符或将其标记为无效字符是非常烦人的。 你也可能想看看这个 Stackoverflow question about SQL Injections . |
![]() |
5
3
参数化内联SQL或参数化存储过程是保护您自己的最佳方法。正如其他人指出的,仅仅剥离/转义单引号字符是不够的。 您将注意到,我专门讨论“参数化”存储过程。如果您恢复到将过程传递的参数连接在一起,那么仅仅使用存储过程也是不够的。换句话说,在存储过程中包装完全相同的易受攻击的SQL语句并不会使其更加安全。您需要像处理内联SQL那样在存储过程中使用参数。 |
![]() |
6
2
而且-即使你只是寻找撇号,你也不想删除它。你想 逃跑 它。你可以用两个撇号来替换每一个撇号。 但是参数化查询/存储过程要好得多。 |
![]() |
7
2
由于这是一个相对较老的问题,我不会费心写一个完整而全面的答案,因为答案的大部分方面都被一个或另一个海报提到过。
查看完整的研究论文 http://www.comsecglobal.com/FrameWork/Upload/SQL_Smuggling.pdf (透露,我是这方面的主要研究人员)或者只是谷歌的“SQL走私”。 |
![]() |
8
2
. …呃,大约5000万种其他方式
也许有点像
产生的SQL可能类似于:
(
|
![]() |
9
1
是的,绝对如此:根据您的SQL方言等,有许多方法可以实现不使用撇号的注入。 针对SQL注入攻击的唯一可靠防御是使用数据库接口提供的参数化SQL语句支持。 |
![]() |
10
1
相反,我会坚持使用参数化查询,并完全消除这个问题。 |
![]() |
11
0
这取决于您如何组合查询,但本质上是的。 例如,在Java中,如果你要这样做(故意的惊人例子):
然后你很有可能会接受注射攻击。 Java有一些有用的工具来保护这些,例如PraveReDealScript(在哪里传递一个字符串,比如“从客户那里选择NAMEGID,ID=?”JDBC层在替换时处理转义?但是其他一些语言对此没有太大帮助。 |
![]() |
12
0
事情是撇号可能是真正的输入,当您在代码中使用内联SQL时,必须通过将它们加倍来避免它们。你要找的是一个regex模式,比如:
用于过早结束正版语句的分号,一些插入的SQL后跟双连字符以注释原始正版语句中的尾随SQL。在攻击中可以省略连字符。 因此,答案是:不,简单地删除撇号并不能保证SQL注入的安全性。 |
![]() |
13
0
我只能重复别人说过的话。参数化SQL是一种可行的方法。当然,编写代码有点麻烦,但是一旦你完成了一次,就不难剪切和粘贴代码,并进行必要的修改。我们有许多.NET应用程序允许网站访问者指定一系列搜索条件,并且代码会动态地构建SQL Select语句-但是用户可以输入的所有内容都会进入一个参数。 |
|
14
0
当您期望一个数字参数时,您应该始终验证输入以确保它是数字的。除了有助于防止注入,验证步骤将使应用程序更加用户友好。 如果您在预期id=1044时收到id=“hello”,最好向用户返回一个有用的错误,而不是让数据库返回一个错误。 |
|
Johnny T · 基于当前值的SQL合并表[重复] 5 月前 |
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 6 月前 |
![]() |
ojek · 如何对SQL结果进行分组和编号? 6 月前 |
![]() |
senek · 如何在PL/SQL中将选择结果(列)放入数组中 6 月前 |
![]() |
Sax · 规范化Google表格(第一步) 6 月前 |
![]() |
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 6 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 6 月前 |