如何使用preg_match?

时间:2013-05-27 18:58:32

标签: php flash

我在php中放了一个小的电子邮件脚本供flash使用。为了使其更安全,我添加了一个preg_match检查以比较referrer和preg_match以防止标头注入。

对于引荐来源检查,我正在对$ url变量进行欺骗。只有从引用者URL开始才应该是真的。例如,不允许http://spambot.com/index.php?http://www.mysite.nl,但“http://www.mysite.nl”是。要做到这一点,这是正确的格式吗?

//check start with string
if (preg_match("/^".$url."/",$result); 

让我有点困惑,因为我想对变量$ url检查$ result而不是字符串'$ url'。

对于头部注入保护:这个preg_match行应该这样做吗?

//prevent header injection
if (preg_match( "/[\r\n]/", $_POST["sFrom"] ) || preg_match( "/[\r\n]/", $$_POST["sEmail"] ) ) 

以下是完整的电子邮件脚本供进一步参考:

?php

//referrer: 
$url = http://www.mysite.nl

//check referrer
$result = stripos($url, $_SERVER['HTTP_REFERER']);

//check start with string
if (preg_match("/^".$url."/",$result); 
{

//prevent header injection
if (preg_match( "/[\r\n]/", $_POST["sFrom"] ) || preg_match( "/[\r\n]/", $$_POST["sEmail"] ) ) 
        {

if ($result === false)
{
die("error"); //bad referrer
}
else
{
//process the action

$sendTo = $_POST["sEmail"];
$subject = $_POST["sSubject"];

$headers = "From: " . $_POST["sFrom"] . "<noreply@mysite.nl>\r\n";
$headers .= "Reply-To: " . "<noreply@mysite.nl>\r\n";
$headers .= "Return-path: " . "<noreply@mysite.nl>";

$message = $_POST["sMessage"];

mail ($sendTo, $subject, $message, $headers);

}

}

}
?>

1 个答案:

答案 0 :(得分:0)

在Mamp上测试它并使用preg_match来查找以$ url开头的字符串是正确的。在标题注入中使用preg_match需要一些修正。不得不在两种情况下使用!pregmatch,因为只有在from和to字段中没有任何换行符时脚本才会继续。