PHP - String Clean

时间:2014-07-24 15:07:07

标签: php string

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

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

例如,daniweb使用和HTML EDITOR(wysiwyg。

我也试过

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

4 个答案:

答案 0 :(得分:0)

如果您使用mysqli 你可以用这个:

$mysqli->real_escape_string($value);

  

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

答案 1 :(得分:0)

如果您想允许用户输入HTML标签但不允许他使用某些标签(如脚本),您应该只为标签实施某种形式的白名单。

$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标记

答案 2 :(得分:0)

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;




 }

答案 3 :(得分:-1)

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

Doctrine的主要功能之一是在面向专有对象的SQL方言(称为Doctrine查询语言(DQL))中编写数据库查询的选项。实际的SQL查询仅由Doctrine生成(这样可以防止SQL注入和其他类似的事情)。

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

请阅读有关安全性的信息:http://www.doctrine-project.org/2014/02/21/security_in_doctrine.html