为什么mysqli prepare语句不清除数据

时间:2018-10-17 10:20:15

标签: php database mysqli

我正在使用此代码

<?php
include('connection.php');
$heading = $_POST['upd_head'];
$note =  $_POST['upd_text'];
$post_id = $_POST['up_post_id'];
$supd_head= "UPDATE posts SET heading= ?, note=? WHERE post_id=?";
$stmt_head= mysqli_stmt_init($db_conx);
if(!mysqli_stmt_prepare($stmt_head, $supd_head)){
echo "sql is not ready";
 }
else{
mysqli_stmt_bind_param($stmt_head, "sss", $heading,$note,$post_id);
mysqli_stmt_execute($stmt_head);
}

?>

当我输入此信息时

<script>alert('hack');</script>

它按原样保存在数据库中,并在更新数据后刷新页面时发出警报消息。为什么不先清理数据?但是我认为在使用prepare语句时没有使用mysqli_real_escape_string

1 个答案:

答案 0 :(得分:0)

mysqli_stmt_prepare并不是为了防止Cross Site Scripting (XXS)

这完全取决于您如何显示数据。上面的链接显示了一个示例:

echo htmlspecialchars($string, ENT_QUOTES, 'UTF-8');

OWASP website上可以找到很多信息