消毒&验证

时间:2014-12-02 04:02:26

标签: php sanitization

回到另一个问题。

我遇到过这个非常好的功能,我认为它可以消毒和验证(我真的希望这个陈述真的是真的)。这是功能及其用法。

     if(funcChkLogin($_POST['username']))
        {
          $username = escape_data($_POST['username']);
        } 

     funcChkLogin($str)
     {
         return preg_match("/^[A-z0-9_\-\.]{2,20}$/", stripslashes(trim($str)));
     } 

     escape_data($data)
     {
       $data = mysql_real_escape_string(trim($data));
       $data = strip_tags($data);
       return $data;
     } 

因为我读到striplashes的使用会产生问题,我想问一下这种方法对于消毒的安全性和强度。可以改进吗?

我知道使用PDO更好但是可能有数据没有进入数据库然后使用这样的好函数是一个好主意,以确保我们运行干净的PHP代码。正确?

谢谢大家!

2 个答案:

答案 0 :(得分:1)

除非您执行special precautions,否则

mysql_real_escape_string可能不安全。它也被弃用了。使用PDO。

  

我知道使用PDO更好但

不,#34;但是" s。做出正确的选择。

答案 1 :(得分:0)

不要滚动自己的绑定/转义功能

您应该自己编写代码的唯一方法是您实际希望用户数据符合的“规则”。 PHP已经拥有处理所有数据库的工具。它还具有处理输出到html的功能。对所有内容进行清理的概念通常是对实现信任用户输入的可怕程度的过度补偿反应,并且不适用于您尝试应用它的大多数情况。 使用现有的原生函数(& PDO)。

通常只有在更改格式/存储

时才能转换数据

您应该考虑当更改数据格式时,您应该考虑在最后可能的时刻转义或转换它,而不是尝试清理每种可能的未来使用数据的方式。进入这种新格式,以便它具有您想要的新媒体的显示功能。

对正确的目标

使用正确的功能(& PDO)

想要它进入数据库吗?在那时将它绑定到准备好的查询。想把它放在你的HTML中吗?恰好在那个时候为html逃脱它。想要在json? json_encode将它输出到你的api之前。为您执行这些常见的转义/绑定/转换过程的函数总是写入php语言,所以不要重新发明轮子。

One of the linked duplicate answers有一些很好的例子,当你从php变量转换为mysql数据单元,或者从php变量转换为html文本显示区域时,这些函数会被转义。只需重复使用它们。