嘿,我想知道每个人都应关心的$ _REQUEST变量背后是否隐藏着任何漏洞。假设我们有PHPMailer库,我们通过html表单标记调用mail.php:
...
//mail.php
//send email
$email = $_REQUEST['email'] ;
$name = $_REQUEST['name'] ;
$subject = 'mail test';
$message = $_REQUEST['message'] ;
$tel = $_REQUEST['tel'];
$formcontent=" From: $name \n e-mail: $email \n Telephone: $tel \n Message: $message";
require 'PHPMailer/PHPMailerAutoload.php';
....
$mail = new PHPMailer;
$mail->Subject = $subject;
$mail->Body = $formcontent;
$mail->send();
...
实际上是否有人通过发送一些会导致任意代码执行或类似内容的“邪恶”字符来伪造有效负载?
答案 0 :(得分:3)
我决定做出更详细的回答,因为安全很重要。
$_REQUEST
不是问题,有人使用它是问题所在。 $_REQUEST
只是$_GET
,$_POST
和$_COOKIE
的总和。所以相同的原则适用于$_REQUEST
。
首先,如果您尝试遵循&#34的原则;不信任来自用户的任何数据" ,您将会知道下一步该做什么。
任何数据的重要部分,无论它来自何处,都是关于它到底的地方。因此,如果您将数据放入HTML模板并且不会逃避重要的HTML字符,那么这可能会导致网站损坏或被黑。如果数据传送到数据库或任何其他目的地,情况也是如此。
在你的情况下,你使用PHPMailer,我不知道有多少安全性在那里实现,如果PHPMailer没有做任何转义,可能是有人在邮件中添加了你不想要的东西。
$_REQUEST
还有一个问题。因为它是$_GET
,$_POST
和$_COOKIE
的总和,可能是因为您没有看到所有数据,或者您认为这是来自您的网址但来自一个Cookie。
如果例如$_GET
和$_COOKIE
具有相同的密钥,则会出现这种情况,而不是只根据您的配置看到一个值。这就是为什么我更喜欢使用$_GET
,$_POST
和$_COOKIE
,但其他主体仍然有效。