关于来自mysql数据库的php输入和输出数据

时间:2017-10-06 17:46:48

标签: php html xss

抱歉,我的英语不好!

因为我正在学习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>时,我看到数据已正确(可能)转义/保存在数据库中。那样:&lt;script&gt;alert(1)&lt;/script&gt;

  

现在,当我输出这个数据时,我应该使用任何PHP函数吗?

     

如果没有那么它安全吗?

好的,如果我使用htmlentities之类的任何PHP函数,那么数据显示为O&#039;Really &lt;script&gt;alert(is it safe?)&lt;/script&gt;

当然我不想要。

现在,当我编辑这些数据时,我看到数据以这种方式保存到数据库中:

O&amp;#039;Really &amp;lt;script&amp;gt;alert(is it safe?)&amp;lt;/script&amp;gt;

  

你能告诉我安全地向/从数据库插入/输出数据的正确方法/指南吗?

1 个答案:

答案 0 :(得分:0)

从数据库中的网页存储用户指定的数据时,您希望处理(至少)两种不同的风险:

  1. 跨站点脚本(XSS)攻击,如上所述 AXAI 。在这种情况下,问题实际上不是数据库层,而是插入到HTML代码中的动态文本字段。在您的代码段中,您通过将标记标记(&lt;和&gt;)转换为实体之前将存储在数据库中来处理此问题。我建议做相反的事情(如 tadman 所说):保持纯文本不变(但请参阅下一节),并在输出HTML输出中的字段时使用htmlspecialchars()。

    < / LI>
  2. SQL注入攻击。基本上,你想要正确地转义任何特殊字符,例如'必须在SQL命令中转换为\'。如果正确完成此转义,则不会扭曲数据库中保存的内容,但会确保用户输入的所有字符(无论是正常的还是特殊的)都放在数据库中。文章http://php.net/manual/en/security.database.sql-injection.php描述了这一点,并且还提供了更好的方法(即变量绑定)。

相关问题