|
|
1
48
占位符 足以防止注射。您可能仍然对缓冲区溢出开放,但这与SQL注入完全不同(攻击向量不是SQL语法而是二进制)。由于传递的参数都将被正确转义,因此攻击者无法传递将被视为“活动”SQL的数据。 不能在占位符内使用函数,也不能将占位符用作列或表名,因为它们是以字符串文本形式转义和引用的。 但是,如果您使用 参数 作为A的一部分 字符串连接 在动态查询中,您仍然容易被注入,因为您的字符串不会被转义,但会是文字。使用其他类型的参数(如整数)是安全的。
也就是说,如果使用输入来设置
|
|
2
12
不,在您将未验证的数据插入到SQL查询中时,仍然存在SQL注入的风险。 查询参数通过将文字值与SQL语法分开来帮助避免这种风险。
这很好,但是在动态SQL查询中插入数据还有其他目的,即不能使用查询参数,因为它不是SQL值,而是表名、列名、表达式或其他语法。
不管您是使用存储过程还是直接从应用程序代码执行动态SQL查询,这都无关紧要。风险仍然存在。 在这些情况下,补救办法是 菲欧 必要时:
|
|
3
12
在这个线程中,关于“参数化查询”的定义似乎有些混淆。
根据前面的定义,许多链接都显示了有效的攻击。 但“正常”的定义是后者。根据这个定义,我不知道有什么SQL注入攻击会起作用。这并不意味着没有,但我还没有看到。 从评论中,我没有足够清晰地表达自己,因此这里有一个希望更清楚的例子: 这种方法 是 打开SQL注入
这种方法 不是 打开SQL注入
|
|
4
10
用于构造动态查询的任何字符串类型(varchar、nvarchar等)的SQL参数仍然容易受到攻击 否则,参数类型转换(例如到int、decimal、date等)应消除通过参数注入SQL的任何尝试。 编辑:一个示例,其中参数@p1是表名
如果从下拉列表中选择@p1,则它是潜在的SQL注入攻击向量; 如果@p1是以编程方式制定的,并且没有用户干预的能力,那么它不是潜在的SQL注入攻击向量 |
|
5
6
缓冲区溢出不是SQL注入。 参数化查询可以保证您对SQL注入的安全性。它们不能保证在您的SQL Server中不存在以bug形式存在的可能的漏洞利用,但是没有任何东西可以保证这一点。 |
|
|
6
2
如果以任何方式使用动态SQL,则数据是不安全的,因为权限必须在表级别。是的,您限制了该特定查询的注入攻击类型和数量,但不限制用户在找到进入系统的方法时可以获得的访问权限,并且您完全可以让内部用户访问他们不应该访问的内容,以便进行欺诈或窃取个人信息以进行销售。任何类型的动态SQL都是一种危险的实践。如果使用非动态存储进程,则可以在进程级别设置权限,除进程定义的权限外,任何用户都不能执行任何操作(当然,系统管理员除外)。 |
|
7
1
存储过程可能容易受到通过溢出/截断进行的特殊类型的SQL注入的攻击,请参见:此处通过数据截断启用的注入: |
|
8
1
请记住,使用参数,您可以轻松地存储字符串,如果没有任何策略,可以说用户名,“);删除表用户;—” 这本身不会造成任何伤害,但您最好知道在应用程序中该日期在何处以及如何进一步使用(例如存储在cookie中,稍后检索以执行其他操作)。 |
|
|
9
1
您可以运行动态SQL作为示例
|
|
|
blogger13 · 视频租赁店数据库的规范化 1 年前 |
|
|
ì¤ì¤í · 为什么LEFT INNER JOIN被弃用? 1 年前 |
|
|
relatively_random · 确保两个表之间一致的共同参考 1 年前 |
|
|
Grenish Rai · Firestore错误“用户文档不存在” 1 年前 |
|
|
Saijo-Shi · PLpgsql中的更新触发器 1 年前 |
|
Dante · Django::配置不当:池不支持持久连接 1 年前 |
|
YouLocalRUser · 删除重复行,保留第一行 2 年前 |