gpt4 book ai didi

Perl 和参数化语句

转载 作者:行者123 更新时间:2023-12-03 23:58:33 26 4
gpt4 key购买 nike

我正在寻找参数化语句未正确执行的确认。当前代码如下:

$ywant = "user supplied integer";
$select = "SELECT a.Authors, a.PublicationYear, a.Title, a.URL, a.ArticleID, f.Format ".
"FROM tbl_ETI_Article a, tbl_ETI_Format f ".
"WHERE a.PublicationYear = '".$ywant."' ".
"AND a.FID = f.FID ".
"ORDER BY a.PublicationYear DESC, a.Title ASC";

$sth = $dbh->prepare( " $select " );
$sth->execute();

我了解选择字符串中的 $ywant 变量应替换为占位符“?”然后将用户提供的数据作为参数放在执行语句中。

我的问题是,上面是否仍然提供任何针对注入(inject)攻击的保护,因为它仍在“准备中”?

最佳答案

这是一个有风险的 SQL,因为如果您不信任它的来源,$ywant 可能包含恶意代码。所以最好这样做:

$ywant = "user supplied integer";
$select = qq{SELECT a.Authors, a.PublicationYear, a.Title, a.URL, a.ArticleID, f.Format
FROM tbl_ETI_Article a, tbl_ETI_Format f
WHERE a.PublicationYear = ?
AND a.FID = f.FID
ORDER BY a.PublicationYear DESC, a.Title ASC};

$sth = $dbh->prepare($select);
$sth->execute($ywant);

并避免任何 SQL 注入(inject)潜在问题。对于这种攻击,prepare 语句本身并不能保护您

关于Perl 和参数化语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66223980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com