sql - 只有字母和数字的字符串可以注入(inject) SQL 语句

标签 sql sql-injection

我是SQL注入(inject)的新手,看了一些文章,很多黑客可能会使用';'和空格''在他们的输入,例如:

(1) username = '123;drop table account'

(2) 用户名​​ = '123 and 1=1'

但问题是,如果我们只允许用户在客户端输入字母(大写和小写)和数字,不允许任何其他字符,如空格,分号,是否存在任何字符串可以注入(inject)SQL语句? ?如果是这样,谁能给我一个例子?谢谢!

请注意,我没有问客户端是否可以防止SQL注入(inject),我只是想知道这种带有字母和数字的字符串是否只存在用于进行SQL注入(inject)。

最佳答案

首先,您在客户端所做的任何事情都可以被绕过。记住这一点的最简单方法是将“客户端”替换为“在攻击者的计算机上,他们可以完全控制”。

在网站的特定情况下,这可能就像攻击者在浏览器上按 F12 并编辑页面一样简单,或者可能需要他们使用其他方式制作 HTTP 请求,但您能做的最多在他们弄清楚的时候让他们慢几分钟。 您无法控制攻击者可以尝试向您发送哪些数据。

其次,我想不出只使用数字和非重音字符的攻击,但这并不意味着没有。另一方面,我想不出很多地方以这种方式限制输入仍然会产生有用的功能。基于白名单的验证(在服务器端)当然有它的位置,但是需要为每个场景提供正确的白名单,这使得它成为一种尴尬的安全机制。

因此,您最好首先确保在使用数据的任何地方都使用正确的转义(转义总是关于输出/使用,而不是关于输入/source),并尽可能将数据与代码分开(例如,使用参数化查询而不是在 SQL 字符串中包含数据)。一旦你有了这个工作,基于白名单的验证可能是一个明智的额外步骤。

关于sql - 只有字母和数字的字符串可以注入(inject) SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51233585/

相关文章:

mysql - 使用if else自动更新mysql表中的记录

mysql - 更新 MySQL 中一列中的多行

sql-server - 动态 SQL 有哪些危险以及可以避免吗?

php - SQL注入(inject)无法正常工作

php - 使用数据库级 MD5 函数是否比应用程序级函数具有更大的安全风险?

mysql - 为什么我的查询在正确的情况下却给出错误?

C# SqlConnection 异常 : Keyword not Supported 'Port'

mysql - 剪切/优化 radacct 表 (FreeRADIUS)

java - SQL 注入(inject)通常如何在 Spring/Hibernate 设置中停止

c# - 我的代码中防止 sql 注入(inject)的最佳实践是什么?