有人能告诉我我做错了什么吗?我正在尝试使用 php 过滤器清理和验证表单用户输入。 此输入将转到 mySql 数据库,然后转到 html 页面输出,因此我需要删除所有 html 标记并为 mySQL 提供安全性。
谢谢。
/*
* BEGIN Sanitize and validate
*/
// Adding fields to sanitize array.
$filters = array(
'author' => FILTER_SANITIZE_SPECIAL_CHARS,
'title' => FILTER_SANITIZE_SPECIAL_CHARS,
'description' => FILTER_SANITIZE_SPECIAL_CHARS,
);
/*** apply the filters to the POST array ***/
$filtered = filter_input_array(INPUT_POST, $filters);
// filtering out anything that isn't an email address
$sanitized_email = filter_var(($_POST["email"]), FILTER_SANITIZE_EMAIL);
if ( filter_var($sanitized_email, FILTER_VALIDATE_EMAIL) == TRUE) {
echo '';
} else {
echo 'Invalid Email Address. Go Back.';
exit;
}
/*
* BEGIN sanitize and validate
*/
新代码,但仍然无法正常工作。 我做错了什么。 仍然在数据库中获取html,并且错误不起作用。
/*
* BEGIN Sanitize and validate
*/
// Adding fields to sanitize array.
$filters = array(
'author' => FILTER_SANITIZE_STRING,
'title' => FILTER_SANITIZE_STRING,
'description' => FILTER_SANITIZE_STRING,
);
/*** apply the filters to the POST array ***/
$filtered = filter_input_array(INPUT_POST, $filters);
$filters = array_map('mysql_real_escape_string',$filters);
$filters = array_map('htmlspecialchars',$filters);
if ( filter_var_array($filtered, FILTER_SANITIZE_STRING)) {
echo '';
} else {
echo 'Invalid Input. Go Back.';
exit;
}
// filtering out anything that isn't an email address
$sanitized_email = filter_var(($_POST['email']), FILTER_SANITIZE_EMAIL);
if ( filter_var($sanitized_email, FILTER_VALIDATE_EMAIL)) {
echo '';
} else {
echo 'Invalid Email Address. Go Back.';
exit;
}
/*
* BEGIN sanitize and validate
*/
第2编如下:
通过将清理代码添加到将数据带到数据库的脚本区域,获取要在数据库中显示的清理数据。
$_POST['author'] = mysql_real_escape_string(trim($_POST['author']));
$author=filter_var($_POST['author'], FILTER_SANITIZE_STRING);
$_POST['email'] = mysql_real_escape_string(trim($_POST['email']));
$email=filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
现在我必须完成验证电子邮件的尝试。
第一件事:你的查询安全性不是由过滤器模块提供的;该扩展与数据库交互无关,它只清理或验证用户输入(之后你可以在不使用数据库的情况下用它做很多事情)
更新:例如,在使用过滤器模块后,会破坏 sql 查询的引号或撇号仍然存在,并且由于字符串没问题,如果您决定将其保存在数据库中,您的工作就是对其进行转义(或者在像 PDO 这样的系统中不会有问题绑定参数)
因此,为了保护您的查询,您应该使用 PDO,或者如果您坚持使用其他系统,您可以使用合适的东西(例如使用 mysql_* 函数的mysql_real_escape_string转义输入)
考虑到您没有说您遇到的问题是什么,我可能会补充一点,如果您想"清理"用户输入并删除 html,您也应该使用 FILTER_SANITIZE_STRING 标志而不是FILTER_SANITIZE_SPECIAL_CHARS
对我来说,这个脚本 http://codepad.org/Wrgl0qEg 工作正常,并从输入中删除 HTML 标签