什么是最好的PHP输入过滤函数?

176
我正在尝试编写一个函数,可以将所有字符串传递到其中进行清理,以便从中得到的字符串在插入数据库时是安全的。但是有很多过滤函数,我不确定我应该使用/需要哪些过滤函数。
请帮我填空:
function filterThis($string) {
    $string = mysql_real_escape_string($string);
    $string = htmlentities($string);
    etc...
    return $string;
}

4
对于插入操作,只使用mysql_real_escape_string来防止SQL注入是可行的。但当你在使用SELECT查询到的数据时(用于HTML输出或PHP公式/函数中),应该使用htmlentities函数处理。 - davidosomething
1
参见 https://dev59.com/oHVD5IYBdhLWcg3wL4cA#60496,其中有一个特定于数据库插入清理的答案(它给出了 PDO 的示例,其他人在下面也提到了)。 - Pat
14个回答

1

您的image无法加载(或者可能需要在Google Drive上登录)。 - Kristoffer Bohmann

1
如您所提到的,您正在使用SQL过滤,我建议您使用PDO和预处理语句。这将大大提高您的保护水平,但请进一步研究对传递给SQL的任何用户输入进行过滤。
要使用预处理语句,请参见以下示例。您有带有?的sql值,然后使用3个字符串'sss'绑定这些值,分别为firstname、lastname和email。
// 准备并绑定 $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"); $stmt->bind_param("sss", $firstname, $lastname, $email);

0

这实际上并没有回答问题。请考虑修改您的答案,包括一个解决方案。 - kris
希望你喜欢! - Kuntur
我做。很好的回答! - kris
我建议在 PHP 7 中注明 mysqli_real_escape_string() 是可用的。 - Chris
嗨,Chris,这里提供的解决方案涉及到mysql_real_escape_string,我注意到从现在开始阅读它已经不存在于PHP7中,并提出了使用PDO(和过滤器)而不是mysqli的替代方案。请随意添加一条说明使用您建议的解决方案。问候 - Kuntur

-1
function sanitize($string, $dbmin, $dbmax) {
    $string = preg_replace('#[^a-z0-9]#i', '', $string); // Useful for strict cleanse, alphanumeric here
    $string = mysqli_real_escape_string($con, $string); // Get it ready for the database
    if(strlen($string) > $dbmax ||
       strlen($string) < $dbmin) {

        echo "reject_this"; exit();
    }
    return $string;
}

需要解释一下。例如,什么是想法/主旨?你的函数有哪些属性?请通过编辑(更改)您的答案来回复,而不是在评论中回复(不要使用“编辑:”,“更新:”或类似的内容 - 答案应该看起来像是今天写的)。 - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接