擅长:python、mysql、java
<p>大多数SQL注入都不会导致对攻击者有用的结果,只会导致语法错误</p>
<p>例如,将字符串“我不满意”传递给此反馈函数,额外的<strong>“</strong>字符将导致引号不平衡,这将导致错误,导致插入失败</p>
<blockquote>
<p>sqlite3.OperationalError: near "m": syntax error</p>
</blockquote>
<p><em>从技术上讲,这是SQL注入</em>插入到查询中的内容影响了SQL语句的语法。这就是全部。这并不一定会导致成功的“任务:不可能”渗透</p>
<p><a href="https://i.stack.imgur.com/g6dyw.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/g6dyw.jpg" alt="Ethan Hunt perpetrating an SQL injection"/></a></p>
<p>我想不出一种方法来利用您展示的INSERT语句,使它除了产生错误之外,还能做一些聪明的事情</p>
<p>不能将插入更改为生成结果集的选择。即使尝试在第二个SQL查询后面插入分号,也只会得到<a href="https://stackoverflow.com/questions/15513854/sqlite3-warning-you-can-only-execute-one-statement-at-a-time">sqlite3.Warning: You can only execute one statement at a time</a></p>
<p>上面的第一次尝试导致语法错误,因为要插入的数据源既有VALUES子句,也有SELECT。在SQL语法中,可以使用其中一种,但不能同时使用两种。见<a href="https://www.sqlite.org/lang_insert.html" rel="nofollow noreferrer">https://www.sqlite.org/lang_insert.html</a></p>
<p>您可能已经知道如何使代码安全,因此不安全的内容甚至不会导致语法错误。但我将为其他读者介绍:</p>
<pre><code>curs.execute("INSERT INTO feedback VALUES (?)", (feedback,))
</code></pre>