如何过滤输入字段..例如收到$ _POST,$ _GETs等。
我正在使用PDO准备好的语句,所以我只是将$ _POST直接转移到PDO(不再做mysql_real_escape_string)。
但是我将$ _POST var转移到$ _SESSION,现在我直接进行,但是我不应该以某种方式过滤它吗? PDO只适用于数据库,“一般”是什么?
答案 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,请测试它。