基本上有两种处理用户输入的方法:
消毒:这会从输入中删除不需要的东西。不需要的东西可能是各种标签、格式无效的字符、某些单词或字母等。这几乎总是你应该做的事情。唯一的例外是如果输入是一个简单的值,例如整数或布尔值,可以通过验证直接处理。
验证:这可以确保输入确实是您所期望的。它是数字、布尔值、文本块等吗?这与其说是关于安全性,不如说是关于实际获取正确类型的数据以使您的程序能够运行。
对于这两点,有一个名为Filter的 PHP 扩展。它是考虑到这些东西而制作的。
对于清理输入,您可以执行以下操作:
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$age = filter_input(INPUT_POST, 'age', FILTER_SANITIZE_NUMBER_INT);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$password = filter_input(INPUT_POST, 'password', FILTER_UNSAFE_RAW);
并用于验证:
if (preg_match('/[\w\d]{4,20}/', $name) === 0) {
die('Invalid name!');
}
if ( ! ctype_digit($age) || ($age < 13)) {
die('Invalid age or too young!');
}
if ( ! filter_var($email, FILTER_VALIDATE_EMAIL)) {
die('Invalid email address!');
}
if (strlen($password) < 10) {
die('Password is too short!');
}
要记住的一件非常重要的事情是没有神奇的药丸。用户输入不能只是在漂白剂进来的时候洗掉,然后说是安全的。您需要知道用户输入应该是什么,然后相应地处理它。如果它不是您所知道的,那么立即踩刹车并将其扔回给用户。