如何在POST 之前将用户消息转换为字符串到数据库?那么几乎如何使用 php pdo mysql 避免 SQL 注入等
How to convert user messages into a string before POST to database? So pretty much how to avoid SQL injections etc with php pdo mysql
我在网站安全方面遇到了问题。我一直在使用 php 和 PDO。所以我想避免的是,如果用户将代码输入到发送时执行的消息框中。因此,出于示例目的,如果用户在我当前的消息框中输入以下 <?php echo "123"; ?>
,它将向收件人发送一个空白框。我的代码如下;
$insert = $pdo->prepare("INSERT INTO message (sender_id,recipient_id,subject,message,reference_id) VALUES(:userID,:recipientID,:subject,:msg,:ref)");
$insert->bindParam(':userID', $user['user_id'], PDO::PARAM_INT);
$insert->bindParam(':recipientID', $recipientId['user_id'], PDO::PARAM_INT);
$insert->bindParam(':subject', $subject, PDO::PARAM_STR);
$insert->bindParam(':msg', $msg, PDO::PARAM_STR);
$insert->bindParam(':ref', $newRef, PDO::PARAM_INT);
$insert->execute();
我非常希望用户在消息框中输入的任何内容在 POST-ing 到数据库之前转换为字符串。因此在这种情况下,收件人将收到消息 <?php echo "123"; ?>
而不是空白框。请注意,我的印象是我已经在变量绑定期间清理了用户输入($insert->bindParam),这足以让人们无法在消息框中输入代码。但是我被告知他们可以并且已经成功地删除了例如在我的数据库中的表作为测试。
是的。一旦您使用绑定变量,恶意用户发送的字符串就无法构建您不想要的其他查询。
您似乎将 SQL 注入与 XSS 混为一谈。 PDO 参数化正在保护您的系统免受 SQL 注入,但内容仍可用于 XSS。
像现在一样继续保存 数据库中的数据,但是当您必须回显内容时,请按如下方式使用htmlentities()
:
foreach ( $row = stmt->fetchRow(PDO::FETCH_ASSOC) ) {
echo 'Hello ' . htmlentities($row['username']) . '!';
}
htmlentities() 函数将正确转义 <>&'"
字符以防止 XSS。
我在网站安全方面遇到了问题。我一直在使用 php 和 PDO。所以我想避免的是,如果用户将代码输入到发送时执行的消息框中。因此,出于示例目的,如果用户在我当前的消息框中输入以下 <?php echo "123"; ?>
,它将向收件人发送一个空白框。我的代码如下;
$insert = $pdo->prepare("INSERT INTO message (sender_id,recipient_id,subject,message,reference_id) VALUES(:userID,:recipientID,:subject,:msg,:ref)");
$insert->bindParam(':userID', $user['user_id'], PDO::PARAM_INT);
$insert->bindParam(':recipientID', $recipientId['user_id'], PDO::PARAM_INT);
$insert->bindParam(':subject', $subject, PDO::PARAM_STR);
$insert->bindParam(':msg', $msg, PDO::PARAM_STR);
$insert->bindParam(':ref', $newRef, PDO::PARAM_INT);
$insert->execute();
我非常希望用户在消息框中输入的任何内容在 POST-ing 到数据库之前转换为字符串。因此在这种情况下,收件人将收到消息 <?php echo "123"; ?>
而不是空白框。请注意,我的印象是我已经在变量绑定期间清理了用户输入($insert->bindParam),这足以让人们无法在消息框中输入代码。但是我被告知他们可以并且已经成功地删除了例如在我的数据库中的表作为测试。
是的。一旦您使用绑定变量,恶意用户发送的字符串就无法构建您不想要的其他查询。
您似乎将 SQL 注入与 XSS 混为一谈。 PDO 参数化正在保护您的系统免受 SQL 注入,但内容仍可用于 XSS。
像现在一样继续保存 数据库中的数据,但是当您必须回显内容时,请按如下方式使用htmlentities()
:
foreach ( $row = stmt->fetchRow(PDO::FETCH_ASSOC) ) {
echo 'Hello ' . htmlentities($row['username']) . '!';
}
htmlentities() 函数将正确转义 <>&'"
字符以防止 XSS。