如果我正在清理从表单到mysql表的代码,这会起到什么作用?应该/将要输入的数据将是学校科目和教授的名/姓......还有其他关于如何做的建议吗?
/*
Sanitize() function removes any potential threat from the
data submitted. Prevents email injections or any other hacker attempts.
if $remove_nl is true, newline chracters are removed from the input.
*/
function Sanitize($str,$remove_nl=true)
{
$str = $this->StripSlashes($str);
if($remove_nl)
{
$injections = array('/(\n+)/i',
'/(\r+)/i',
'/(\t+)/i',
'/(%0A+)/i',
'/(%0D+)/i',
'/(%08+)/i',
'/(%09+)/i'
);
$str = preg_replace($injections,'',$str);
}
return $str;
}
function StripSlashes($str)
{
if(get_magic_quotes_gpc())
{
$str = stripslashes($str);
}
return $str;
}
答案 0 :(得分:1)
我推荐PHP的PDO class。你可以这样做:
try
{
$sql ='INSERT INTO whatever(a,b,c) VALUES(:a,:b:c);
//or if you prefer...
$sql ='INSERT INTO whatever(a,b,c) VALUES(?,?,?);
$stmt = db::db()->prepare($sql);
$stmt->execute(array(123,234,345));
}
catch(PDOException $e){library::sql_error($e,$sql);}
答案 1 :(得分:1)
感谢大家花时间提供帮助。我选择了preg_replace函数,该函数将字符限制为我希望人们使用的内容:preg_replace("~" . "[^a-zA-Z0-9\-\_\.\ ]" . "~iU", "", $string)
。我还使用了mysql_real_escape_string
所以我在发送到数据库之前进行了两级过滤。
答案 2 :(得分:0)
为什么不使用mysql_real_escape_string()
来逃避可能导致问题的所有潜在角色?除了内置之外,它还会使用MySQL自己的mysql_real_escape_string
,因此您知道您将始终了解需要为已安装的数据库进行转义的内容。
答案 3 :(得分:0)
最好的选择是使用PDO的bindValue方法:
http://www.php.net/manual/en/pdostatement.bindvalue.php
这可以排除你所有逃跑的行为。
对于表单,您还可以查看:
http://semlabs.co.uk/docs/xfl/xfl-elements/sanitise
这是一组PHP类,可以轻松处理表单,但需要一段时间才能完成。
答案 4 :(得分:0)
试试这个:
function sanatize($value) {
$value = preg_replace("~" . "[^a-zA-Z0-9\-\_\.]" . "~iU", "", $value);
return $value;
}