PHP -字符串清洁


PHP - String Clean

我正在为我的网站建立一个评论系统。问题是我想使用HTML编辑器,但不是完全必要的。

我的问题是安全。如何保护我保存在数据库中的用户输入?因为我在我的网站上显示输入,我想防止XSS, SQL注入和其他类似的事情。但是我仍然希望我的用户能够书写任何字符。

例如,daniweb使用和HTML编辑器(wysiwyg .

)

我也试过

function bstring( $value )
{
    $value = htmlentities( $value, ENT_QUOTES );
    $value = strip_tags( $value );
    $value = mysql_real_escape_string( $value );
    return (string)$value;
}

如果使用mysqli你可以这样写:

$mysqli->real_escape_string($value);

转义字符串中的特殊字符以供SQL语句使用

如果您希望允许用户输入HTML标记,但不允许他使用某些标记(如Scripts),则应该为标记实现某种形式的白名单。

$allowed_tags = "<b><i><br>"; // Some safe examples
$value = strip_tags( $value, $allowed_tags );

总是知道何时以及为什么使用哪个过滤器:

  • mysql_real_escape_string -保护您的SQL免受注入-如果没有使用适当的参数绑定连接器总是需要的
  • strip_tags -从页面上显示的不安全输出中删除不需要的标签。可用于对抗XSS攻击-参见上文
  • htmlspecialchars -编码html标签,使它们不再工作。防止XSS,但也删除了HTML功能-你不希望这样,因为你实际上希望用户使用HTML标签

htmlentities不提供安全性

则需要使用replace删除HTML下面是你想禁止的标签和你想允许的标签

 function  bstring($str){
    //forbid your tags here
   $forbidden_tags = array('script', 'body', 'html');

   for($i = 0; $i < count($forbidden_tags); $i++){
        $tag = '%<'.$forbidden_tags[$i].'.*?</'.$forbidden_tags[$i].'>%i';
        $result = preg_replace($tag, 'NOT ALLOWED', $str);
   }

   return $result;


 }

可以使用Doctrine: http://en.wikipedia.org/wiki/Doctrine_%28PHP%29

Doctrine的关键特性之一是可以选择用一种专有的、名为Doctrine查询语言(Doctrine Query Language, DQL)的面向对象SQL方言编写数据库查询。实际的SQL查询仅由Doctrine生成(这将防止SQL注入和其他类似的事情)。

官方网站:http://www.doctrine-project.org/

阅读这篇关于安全的文章:http://www.doctrine-project.org/2014/02/21/security_in_doctrine.html