将值传递给 Sybase 查询时,在 Perl 中避免 SQL 注入的最佳方法是什么?
我担心连接到 Sybase 的 Perl 代码中的“Bobby 表”SQL 注入问题。
显然,做这样的事情:
my $var = $ARGV[3]; # Example! I use Getopt for real
my $sql = "select * from table1 where key1='$var'";
$sth = $dbh->prepare($sql);
$sth->execute();
...非常糟糕,因为用户可能会1'\ngo\ndrop table important_table\ngo'
在命令行上将代码作为参数值传递。
我知道 2 个解决方案,都不好:
使用去掉所有单引号
s/'//g;
这对现实生活不利,因为有时用户可能合法地想要传递包含撇号(例如姓氏)的字符串。
编写一个复杂的正则表达式来检测可能的 SQL 注入
从我的几次尝试中,这似乎几乎不可能正确。
最佳做法是什么?