gpt4 book ai didi

php - [已解决]PDO/MySQL 准备语句注入(inject)分号

转载 作者:行者123 更新时间:2023-11-30 01:21:18 27 4
gpt4 key购买 nike

我想知道为什么在我准备好的声明中,公式用户输入中的一些字符没有像我期望的那样被转义。这是我在这个特定部分的代码:

if( isset( $_POST['key'] ) && strlen($_POST['key']) <= 15) {
$sql = "SELECT titel, date, content FROM News WHERE content LIKE :content OR titel LIKE :title";
if( $stmt = $pdo->prepare($sql) ) {
$temp = "%".$_POST['key']."%"; // NOT manually escaped here
$stmt->bindParam(':content', $temp); // should escape!?
$stmt->bindParam(':title', $temp); // should escape!?
$stmt->execute();
$stmt->bindColumn("Titel", $title, PDO::PARAM_STR);
$stmt->bindColumn("Datum", $date, PDO::PARAM_STR);
$stmt->bindColumn("Inhalt", $content, PDO::PARAM_STR);

while( $stmt->fetch() ) {
echo "<span class='head'>".$title." :: ".$date."</span><br />".shorten($content)."...<br /><hr>"; // the function shorten just shortens the content for preview reasons
}

// ends statement
$stmt = NULL;

// ends connection
$pdo = NULL;
}
else {
$err .= "statement wasn't prepare()'ed!";
}
}
else {
$err .= "no or false input!";
}

所以这基本上可以正常工作,但是当我输入“;”时例如,它只是抛出所有结果。所以我不确定它是否真的正确地转义了输入。我错过了什么还是没有所有字符都转义了?如果是的话,它们是什么?我宁愿手动逃避它们。

最佳答案

I was wondering why in my prepared statement some characters from formular user input aren't escaped as i would expect it to be.

因为你的期望是错误的。
准备好的语句不一定涉及任何转义
即使如此 - 诚实的分号字符是完全无害的,并且根本不需要转义。

PDO/MySQL Prepared Statement Injection

您的代码中不可能存在注入(inject),这是完全安全的。

when i enter ';' for example it just throws out every result.

这是另一个问题,与注入(inject)和转义无关。仔细检查您的数据和其他前提。

顺便说一下,稍微缩短一下你的代码

$sql  = "SELECT titel, date, content FROM News WHERE content LIKE ? OR titel LIKE ?";
$temp = "%".$_POST['key']."%";
$stmt = $pdo->prepare($sql);
$stmt->execute(array($temp,$temp));
while( $row = $stmt->fetch() ) {
extract($row);
echo "<span class='head'>$titel :: $date</span><br />".shorten($content)."...<br /><hr>";
}

关于php - [已解决]PDO/MySQL 准备语句注入(inject)分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18497291/

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