【发布时间】:2012-10-11 16:22:03
【问题描述】:
我试图通过循环遍历所有 _POST 数据来防止邮件标头注入,但变量未通过我的验证。我有一些包含斜杠的“日期”字段,其中一些字段可能为空白。不确定这是否与它有关。谁能看出我的逻辑有问题?我不断收到我的“失败”信息。谢谢。
if(isset($_POST['submit'])) {
$boolValidateOK = 1;
function safe( $name ) {
return( str_ireplace(array( "\r", "\n", "%0a", "%0d", "Content-Type:", "bcc:","to:","cc:" ), "", $name ) );
}
foreach($_POST as $value){
if(!safe($value)){
$boolValidateOK = 0;
}else{
$boolValidateOK = 1;
}
}
if($boolValidateOK == 1){
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$to...etc
$subject...etc
$message...etc
mail($to, $subject, $message, $headers);
$success_message = "win";
}else{
$error_message = "fail";
}
}
【问题讨论】:
-
对我来说,这看起来像是一种无用且可能有害的安全“改进”。除非您允许您的用户直接指定邮件标头,否则除了潜在的屠夫用户输入之外,这样做没有任何意义。
-
我是编程新手。你能解释一下怎么做吗?那么我将如何防止标头注入呢?
-
那么,剩下的代码在哪里(即:你用
etc替换的东西)?这听起来不像是你需要做的事情 -
对不起,剩下的代码是一个15+字段的邮件表单。
-
那你怎么设置
$headers?
标签: php email code-injection