处理安全问题的基本php表单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理安全问题的基本php表单相关的知识,希望对你有一定的参考价值。

php的新手,制作一个将其内容发布到PHP文件的Web表单。 PHP文件需要将数据捆绑到自己的电子邮件中,因为我没有足够的信心将数据直接发送到我们的系统。我上传了一个测试PHP文件到服务器进行测试,并且在周末我收到了一些由该文件发送的空白电子邮件,我认为这意味着有人在没有填写表单的情况下访问该文件。

  1. 当有人导航到我的php文件时,我是否使用正确的if语句来阻止代码运行?
  2. 除了webform之外,我怎样才能让.php无法访问?
  3. 我有任何明显的错误吗? <?php if($_SERVER["REQUEST_METHOD"] == "POST") { $emailbody = 'Name: '.$_POST['m_title'].' '.$_POST['m_firstname'].' '.$_POST['m_surname']." " .'Email: '.$_POST['m_email']." " .'Phone: '.$_POST['m_phone']." " .'D.O.B: '.$_POST['m_dob_day'].' '.$_POST['m_dob_month'].' '.$_POST['m_dob_year']." " .'Postcode: '.$_POST['m_postcode']." " .'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语句来阻止代码运行?

不完全是,如果有人使用带有空白表单字段的POST请求访问该文件,它会向您发送一封电子邮件,而不会在帖子中指定变量,如m_title m_email等。

除了webform之外,我怎样才能让.php无法访问?

您可以将CSRF令牌添加到表单

我有任何明显的错误吗?

没有验证,没有逃避可能会导致潜在的安全漏洞。 301没有任何意义,除非你真的想在每次访问带有表单到指定网址的页面时重定向用户。

另一答案

您可以使用前端和后端验证来阻止用户导航到该文件。

  • [前端]使用所需的Web表单字段[html]。
  • [Backend]仅在$ POST ['required_field']!= NULL时发送邮件。
另一答案

请确保所有必需的数据来自请求。

<?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']."
" .'Email: '.$_POST['m_email']."
" .'Phone: '.$_POST['m_phone']."
" .'D.O.B: '.$_POST['m_dob_day'].' '.$_POST['m_dob_month'].' '.$_POST['m_dob_year']."
" .'Postcode: '.$_POST['m_postcode']."
" .'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();

这将帮助您停止必要的邮件操作。

否则,单击“检查提交”按钮

<?php
If(isset($_POST['submit'])){
    // put mail function here
}

我希望这能帮到您 :)

以上是关于处理安全问题的基本php表单的主要内容,如果未能解决你的问题,请参考以下文章

php之表单-2(表单验证)

PHP 表单验证

php $_FILES处理文件上传

为啥在php中硬编码用户名密码安全威胁?

php中如何对提交表单地址栏参数进行加密或者隐藏,或者其他安全性的处理

PHP面试题精讲—从Yii2源码ActiveForm看如何安全处理表单验证