使用PDO你可能会遇到这样的情况:

$dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");

$dbh->prepare("SELECT * FROM REGISTRY where name = ?");

$dbh->prepare("UPDATE table_name SET col1= ?");

它们对于在Db中存储数据、从数据库中获取数据和更新数据库中的数据非常有用。
在学习时,我们强烈强调不要打扰您的卫生处理。你可以百分之百地相信它…
现在,当涉及到查询输出PDO的安全性时,例如:
Sanitizing
像:data这样的恶意代码不会影响PDO。然而,现在DATA只在存储在"SELECT * FROM table_name",中以进行OR 1=1保护时才处理Database,在输出时,如果PDO包含类似DATA的恶意代码,这似乎是用户浏览器中的“黑客”行为。
有什么预防措施?
我们是否必须手动DBDBcolumn"<script>alert("Hacked")</script>"或什么是保护alert的存储、检索和显示的最佳方式?

最佳答案

数据存储
数据库不知道其中存储了什么数据。如果它是正确的(即所有的引号或任何正确的转义),那么数据是正确的,并且将被正确地存储。但是出于什么目的-html/javascript/executable code/script code/或/whatever-db不知道,所以您需要在应用程序(或承担输出责任的另一层)中注意这一点。
PDO公司
PDO也一样-它的意图根本不在数据逻辑中。它只是一个驱动程序,因此,就存储在数据库中而言,它可能只提供适当的数据转义。这就是为什么所有特定的东西都不能在那里被捕捉到(而它们不应该)
“最佳方式”
没有“最好的办法”。不同的数据需要不同的方法来维护安全输出。对于html,它是htmlspecialchars()/htmlentities()-但是对于其他数据类型,它将是其他的东西。你应该清楚地知道你在做什么(也就是你在输出什么)。其主要思想是将数据原样存储在数据库中,并在需要时(即输出完成时)提供安全的输出。即拆分数据库、数据逻辑和输出,并为每个部分提供正确的功能。

关于php - PHP-PDO:PDO仅对输入数据库而不从DB输出安全吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21570416/

10-11 00:06
查看更多