用于清理输入值PHP的函数

时间:2010-06-09 19:05:03

标签: php mysql post sanitization

我用这个:

function safeClean($n)
{
    $n = trim($n);

    if(get_magic_quotes_gpc())
    {
        $n = stripslashes($n);
    } 

    $n = mysql_escape_string($n);
    $n = htmlentities($n);

    return $n;
}

防止任何类型的MySQL注入或类似的东西。每当我用它来包裹$ _POST时就像这样:

$username = safeClean($_POST['user']);
$password = md5(safeClean($_POST['password']));
$vpassword = md5(safeClean($_POST['verify']));
$email = safeClean($_POST['email']);

它甚至不起作用,但是我附加了functions.php并且目录是正确的但是根本不起作用,因为它只显示一个空白页...如果我从每个$ _POST中删除safeClean()它有效。

为什么这根本不起作用?

3 个答案:

答案 0 :(得分:7)

在我看来,这种一般的消毒方法并不是思考问题的最佳方式。首先,参数化查询(可能最方便使用PDO)是解决SQL安全问题的更好方法。但一般 ......

我知道开发人员的冲动是尝试减少你必须考虑的事情。所以,当然,你想知道你是否可以提出一个通用的消毒功能,你只需将所有输入交给,而不必再担心。输入是一个竞技场,但如果你真的想要安全性,你需要特别考虑每个传入的数据应该是什么以及它最终会在哪里。如果你在这里继续自动驾驶,你在某些时候引入安全问题。

答案 1 :(得分:4)

尝试使用mysql_real_escape_string()而不是mysql_escape_string()

答案 2 :(得分:2)

代码中的几乎所有内容都是错误的。

get_magic_quotes_gpc是错位的,htmlentities是错误的,甚至术语“清理”被滥用。

事实上,您不应该为数据库清理任何内容。但只需遵循语法规则即可 看一下非常相似的问题,我已经很好地解释了SQL问题:In PHP when submitting strings to the database should I take care of illegal characters using htmlspecialchars() or use a regular expression?

从空白页开始,你必须学习调试入门。您必须打开错误报告才能看到错误消息而不是空白页。首先,您可以参考这篇文章: 链接开始:http://www.ibm.com/developerworks/library/os-debug/

你可以从你的cript顶部添加这些行开始

ini_set('display_errors',1);
error_reporting(E_ALL);

和查询执行的代码:

$result = mysql_query($query);
if (!$result) trigger_error(mysql_error());