抱歉,我的英语不好!
因为我正在学习PHP并且对数据库中的插入和输出数据有一些疑问。
我正在使用PHP PDO。
要将数据插入数据库我正在使用以下功能:
public static function validate( $string ){
$string = trim($string);
$string = htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
return $string;
}
因此,当我插入此数据O'Really <script>alert(is it safe?)</script>
时,我看到数据已正确(可能)转义/保存在数据库中。那样:<script>alert(1)</script>
现在,当我输出这个数据时,我应该使用任何PHP函数吗?
如果没有那么它安全吗?
好的,如果我使用htmlentities
之类的任何PHP函数,那么数据显示为O'Really <script>alert(is it safe?)</script>
当然我不想要。
现在,当我编辑这些数据时,我看到数据以这种方式保存到数据库中:
O&#039;Really &lt;script&gt;alert(is it safe?)&lt;/script&gt;
你能告诉我安全地向/从数据库插入/输出数据的正确方法/指南吗?
答案 0 :(得分:0)
从数据库中的网页存储用户指定的数据时,您希望处理(至少)两种不同的风险:
跨站点脚本(XSS)攻击,如上所述 AXAI 。在这种情况下,问题实际上不是数据库层,而是插入到HTML代码中的动态文本字段。在您的代码段中,您通过将标记标记(&lt;和&gt;)转换为实体之前将存储在数据库中来处理此问题。我建议做相反的事情(如 tadman 所说):保持纯文本不变(但请参阅下一节),并在输出HTML输出中的字段时使用htmlspecialchars()。
< / LI>SQL注入攻击。基本上,你想要正确地转义任何特殊字符,例如'必须在SQL命令中转换为\'。如果正确完成此转义,则不会扭曲数据库中保存的内容,但会确保用户输入的所有字符(无论是正常的还是特殊的)都放在数据库中。文章http://php.net/manual/en/security.database.sql-injection.php描述了这一点,并且还提供了更好的方法(即变量绑定)。