php邮件功能;这种方式使用它安全吗?

时间:2010-06-09 19:10:58

标签: php javascript html security email

我有一个分类广告网站,在每个分类内,都有一个小表格。

此表单供用户提示他们的“朋友”:

<form action="/bincgi/tip.php" method="post" name="tipForm" id="tipForm">
Tip: <input name="email2" id="email2" type="text" size="30 />
<input type="submit" value="Skicka Tips"/>
<input type="hidden" value="<?php echo $ad_id;?>" name="ad_id2" id="ad_id2" />
<input type="hidden" value="<?php echo $headline;?>" name="headline2" id="headline2" />
</form>

然后将表格提交到tip.php页面,这是我的Q,这是下面的代码安全,即它是否足够好还是我需要制作一些卫生设施和更多安全细节?

    $to = filter_var($_POST['email2'], FILTER_SANITIZE_EMAIL);
    $ad_id = $_POST['ad_id2'];
    $headline = $_POST['headline2'];

     $subject = 'You got a tip';

     $message ='Hi. You got a tip: '.$headline.'.\n';

    $headers = 'From: Tips@domain.com\r\n';
    mail($to, $subject, $message, $headers);

我还没有测试过上述内容。

5 个答案:

答案 0 :(得分:1)

您正在将$ad_id$headline传递给HTML,只是让它立即传回,不变。由于ad_id和标题在表单中不可编辑,不会将它们放在表单上,请将它们保存在服务器上。这是最安全的。

答案 1 :(得分:0)

无论您采取何种过滤方式,都需要对发送这些电子邮件进行评级。即使他们看起来是来自你并且有一些特定于站点的文本,自动机器人也可能会垃圾邮件数十万并获得某种响应(并将您的电子邮件服务器列入黑名单)。只让他们每小时送一把,你就不会减少合法的流量。

答案 2 :(得分:0)

在使用之前清理输入是个好主意。检查以确保两个后置变量的格式正确(例如,只有文本或数字(使用正则表达式或is_numeric等))

答案 3 :(得分:0)

您似乎在$ad_id = $_POST['ad_id2'];$headline = $_POST['headline2'];中拥有XSS。

mail()存在安全问题。您必须小心$ header中的CRLF注入\r\n。在这种情况下,$ headers不受攻击者控制,因此您无需担心。另一点虽然它被称为CRLF注入,它也可以被称为LF注入,因为你真正需要的是新线路,因为SMTP是一种宽容的协议。

答案 4 :(得分:0)

如果$headline来自您自己的数据库,我不会将文本放在隐藏字段中,而是标题的id,并在发送邮件之前从数据库中检索实际文本。< / p>

这样你就可以A.直接检查id是否真的是一个整数而B.确定只知道有效的标题被发送;现在,有人可以发布您的表单,用他们想要的任何文字替换您的标题。