处理安全问题的基本php表单
对PHP非常陌生,制作一个web表单,将其内容发布到PHP文件中。PHP文件需要将数据打包成电子邮件发送给我自己,因为我没有足够的信心将数据直接发送到我们的系统中。我上传了一个测试PHP文件到服务器上进行测试,周末我收到了一些由该文件发送的空白电子邮件,我想这意味着有人在没有填写表单的情况下访问了该文件处理安全问题的基本php表单,php,security,webforms,Php,Security,Webforms,对PHP非常陌生,制作一个web表单,将其内容发布到PHP文件中。PHP文件需要将数据打包成电子邮件发送给我自己,因为我没有足够的信心将数据直接发送到我们的系统中。我上传了一个测试PHP文件到服务器上进行测试,周末我收到了一些由该文件发送的空白电子邮件,我想这意味着有人在没有填写表单的情况下访问了该文件 当有人导航到我的php文件时,我是否使用了正确的if语句来阻止代码运行 我怎样才能使除了webform之外的任何人都无法访问.php 我犯过什么明显的错误吗 <?php if($_SER
<?php
if($_SERVER["REQUEST_METHOD"] == "POST") {
$emailbody = 'Name: '.$_POST['m_title'].' '.$_POST['m_firstname'].' '.$_POST['m_surname']."\n"
.'Email: '.$_POST['m_email']."\n"
.'Phone: '.$_POST['m_phone']."\n"
.'D.O.B: '.$_POST['m_dob_day'].' '.$_POST['m_dob_month'].' '.$_POST['m_dob_year']."\n"
.'Postcode: '.$_POST['m_postcode']."\n"
.'Lenders: '.$_POST['m_bank1'].','.$_POST['m_bank2'].','.$_POST['m_bank3'].','.$_POST['m_bank4'].','.$_POST['m_bank5'].','.$_POST['m_bank6'].','.$_POST['m_bank7'].','.$_POST['m_bank8'];
mail('**removed**', 'Web Lead', $emailbody);
header('Location: https://www.**removed**' true, 301);
}
exit();
<?php
if($_SERVER["REQUEST_METHOD"] == "POST") {
$emailbody = 'Name: '.$_POST['m_title'].' '.$_POST['m_firstname'].' '.$_POST['m_surname']."\n"
.'Email: '.$_POST['m_email']."\n"
.'Phone: '.$_POST['m_phone']."\n"
.'D.O.B: '.$_POST['m_dob_day'].' '.$_POST['m_dob_month'].' '.$_POST['m_dob_year']."\n"
.'Postcode: '.$_POST['m_postcode']."\n"
.'Lenders: '.$_POST['m_bank1'].','.$_POST['m_bank2'].','.$_POST['m_bank3'].','.$_POST['m_bank4'].','.$_POST['m_bank5'].','.$_POST['m_bank6'].','.$_POST['m_bank7'].','.$_POST['m_bank8'];
mail('**removed**', 'Web Lead', $emailbody);
header('Location: https://www.**removed**' true, 301);
}
exit();
无验证、无逃逸可能导致潜在的安全漏洞。301也毫无意义,除非您真的想在用户每次使用表单访问页面时将其重定向到指定的url 您可以使用前端和后端验证阻止用户导航到该文件
- [前端] 对所需的web表单字段[HTML]使用required
- [后端] 仅在$POST[“必填字段”]时发送邮件!=空
- 请确保所有所需数据均来自请求
<?php
if($_SERVER["REQUEST_METHOD"] =="POST") {
If(isset($_POST['m_firstname']) && $_POST['m_firstname']!=''){
If(isset($_POST['m_title']) &&$_POST['m_title']!=''){
//likewise check for required data are coming from request.
$emailbody = 'Name: '. $_POST['m_title'].' '.$_POST['m_firstname'].' '.$_POST['m_surname']."\n" .'Email: '.$_POST['m_email']."\n" .'Phone: '.$_POST['m_phone']."\n" .'D.O.B: '.$_POST['m_dob_day'].' '.$_POST['m_dob_month'].' '.$_POST['m_dob_year']."\n" .'Postcode: '.$_POST['m_postcode']."\n" .'Lenders: '.$_POST['m_bank1'].','.$_POST['m_bank2'].','.$_POST['m_bank3'].','.$_POST['m_bank4'].','.$_POST['m_bank5'].','.$_POST['m_bank6'].','.$_POST['m_bank7'].','.$_POST['m_bank8']; mail('**removed**', 'Web Lead', $emailbody); header('Location: https://www.**removed**' true, 301);
}else{
Echo 'title required';
}
}else{
Echo 'name required';
}
} exit();
在您对标题的调用中,true
关键字的含义是什么?(这似乎是一个打字/复制粘贴错误)@Gabriel它取代了以前设置的标题。这是默认行为。我想这是因为OP需要3 arg,但我不知道为什么;)完全正确,复制粘贴错误。谢谢。@Robert:我指的是无效的语法(某处缺少一个逗号,假设OP真的想通过3个参数:),所以对于我来说,在周日凌晨2:30收到一封空白电子邮件意味着有人修改了一份网络表单?我将研究实现一个令牌。验证也是我必须研究的,谢谢