![]() |
1
6
与其传递列名,不如传递一个标识符,您可以使用硬编码表将该标识符编码为列名。这意味着您不必担心恶意数据被传递,因为所有数据要么是合法翻译的,要么是已知无效的。Psudoish代码:
|
![]() |
2
0
尽管如此,还是可以做到的,我建议使用一个单独且严格的函数来验证列名。允许它只接受一个标识符,比如 /^\w[\w\d_]*$/ 您将不得不依赖于您对自己的列名所做的假设。 |
![]() |
3
0
|
![]() |
4
0
根据另一个查询的结果将列创建为一个表,该表枚举可能的架构值。在第二个查询中,您可以将select硬编码为用于定义架构的列名。如果未返回任何行,则输入的列无效。 |
![]() |
5
0
在标准SQL中,分隔标识符用双引号括起来。这意味着:
这本身并没有多大帮助,但是……如果您可以对通过web表单输入的名称应用带双引号的escape()技术,那么您就可以信心十足地构建查询。 当然,您说过希望避免使用escape,实际上,您不必在提供参数的参数上使用它?席位持有者。但是,当您将用户提供的数据放入查询时,您需要保护自己免受恶意用户的攻击。 不同的数据库管理系统提供分隔标识符的方式不同。例如,MS SQL Server似乎使用方括号[SomeTable]而不是双引号。 |
![]() |
6
0
某些数据库中的列名可能包含空格,这意味着您必须引用列名,但如果您的数据库不包含此类列,则只需通过正则表达式或某种检查运行列名,然后再拼接到SQL中:
|
![]() |
cagta · 如何使用此python脚本避免硬编码sql表达式? 7 年前 |
![]() |
John · MySQL php查询缺陷 7 年前 |
![]() |
Arunabh · 在不使用预处理语句的情况下摆脱SQL注入 7 年前 |