我有一个分类广告网站,在每个分类内,都有一个小表格。
此表单供用户提示他们的“朋友”:
<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);
我还没有测试过上述内容。
答案 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.确定只知道有效的标题被发送;现在,有人可以发布您的表单,用他们想要的任何文字替换您的标题。