php - PDO 准备语句安全

标签 php mysql security pdo

这是我第一次参与这个很棒的网站,所以我希望得到第一个对我的问题的很好的回答。 我正在使用以下代码将数据插入 MySQL 数据库:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) 
{
$q = $conn->prepare("INSERT INTO client (name, address) VALUES (:name, :address)");
$q->bindValue(':name', htmlspecialchars($_POST['name']), PDO::PARAM_STR);
$q->bindValue(':address', htmlspecialchars($_POST['address']), PDO::PARAM_STR);
$q->execute();
}

插入是否足够安全? 我应该在插入时使用 htmlspecialchars() 还是在显示数据时使用?

亲切的问候

最佳答案

是的,您的代码是安全的,但根据一般经验,以中性形式存储数据。也就是说,不针对任何特定的输出或媒体进行编码。在出路时进行编码,而不是在进路时进行编码。

如果您做相反的事情并在存储之前通过 htmlspecialchars() 传递它(就像您在问题中的代码),那么您的数据将专门绑定(bind)为以 HTML 格式输出。如果您想将其输出到其他地方(例如 XML 文档),而 htmlspecialchars() 不适用,那么您必须先对其进行解码。

关于php - PDO 准备语句安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19183780/

相关文章:

php - 当我单击按钮时,我试图根据电子邮件过滤器运行两条语句

PHP - 如果发生错误,发送电子邮件

java - 从Applet下载文件

java - IBM WAS 忽略了 web.xml 中的安全性

java - Android RSA key 对生成-我应该使用标准Java/Bouncy CaSTLe/海绵城堡/JSch/其他吗?

php - 在 bash 脚本中运行命令产生错误

php - 保留按钮的点击值并使用 Jquery 自动刷新

mysql - MySQL存储高精度小数的数据类型

mysql - 连接 2 个 Select 语句并将第二个语句限制为第一个语句的结果

javascript - 将多选与动态生成的选择结合使用