PHP:过滤我的输入字段

时间:2011-01-11 19:34:47

标签: php mysql pdo

如何过滤输入字段..例如收到$ _POST,$ _GETs等。

我正在使用PDO准备好的语句,所以我只是将$ _POST直接转移到PDO(不再做mysql_real_escape_string)。

但是我将$ _POST var转移到$ _SESSION,现在我直接进行,但是我不应该以某种方式过滤它吗? PDO只适用于数据库,“一般”是什么?

4 个答案:

答案 0 :(得分:0)

您还应该对数据进行健全性检查。

因此,如果要插入整数,请先使用is_numeric()进行检查。

如果您需要电子邮件地址,请确保其与电子邮件地址匹配。

您应该始终对要插入数据库的数据执行此类检查。

一旦数据经过审核以便插入数据库,您就可以安全地使用会话。

这有助于防止XSS攻击,并保持数据清洁。

答案 1 :(得分:0)

也许你喜欢这个。不完美,但它很好。

  function clear($data)
    {

        $data = addslashes($data);
        $data = strip_tags($data);
        $data = mysql_real_escape_string($data);
        $bir = array('/\//', '/\^/', '/\./', '/\$/', '/\|/', '/\(/', '/\)/', '/\[/', '/\]/',
            '/\*/', '/\+/', '/\?/', '/\{/', '/\}/', '/\,/');
        $iki = array('\/', '\^', '\.', '\$', '\|', '\(', '\)', '\[', '\]', '\*', '\+', '\?',
            '\{', '\}', '\,');
        $data = preg_replace($bir, $iki, $data);
        return $data;

    }

// USAGE
clear($_GET[]) or clear($_POST[])

Alsı,你必须用is_numeric,is_boolen,is_string函数检查变量。

答案 2 :(得分:0)

只要您过滤$_SESSION的任何输出,就不需要在设置之前对其进行过滤。记住过滤的一个好方法是使用简单的raw_命名约定:

$_SESSION['raw_val'] = $_POST['val'];

这样,当您可能希望以不同方式过滤值时,您可以为以后存储该值:

$_SESSION['filter1_val'] = applyFilter1($_SESSION['raw_val']);
$_SESSION['filter2_val'] = applyFilter2($_SESSION['raw_val']);

当然,验证$_POST['val'] size 可能是一个好主意,这样您就不会在会话变量中存储大量数据。

答案 3 :(得分:0)

尝试提供

等输入
  

' " '

如果你的代码坏了,你知道你的输入需要被过滤。

通过正则表达式对字母和数字进行编码也可以帮助你。

每个论坛或文章都说准备好的声明不受sql注入。

但我认为如果你没有正确地准备好陈述,它就会破裂。

如果您正在使用SP,请测试它。