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

处理安全问题的基本php表单,php,security,webforms,Php,Security,Webforms,对PHP非常陌生,制作一个web表单,将其内容发布到PHP文件中。PHP文件需要将数据打包成电子邮件发送给我自己,因为我没有足够的信心将数据直接发送到我们的系统中。我上传了一个测试PHP文件到服务器上进行测试,周末我收到了一些由该文件发送的空白电子邮件,我想这意味着有人在没有填写表单的情况下访问了该文件 当有人导航到我的php文件时,我是否使用了正确的if语句来阻止代码运行 我怎样才能使除了webform之外的任何人都无法访问.php 我犯过什么明显的错误吗 <?php if($_SER

对PHP非常陌生,制作一个web表单,将其内容发布到PHP文件中。PHP文件需要将数据打包成电子邮件发送给我自己,因为我没有足够的信心将数据直接发送到我们的系统中。我上传了一个测试PHP文件到服务器上进行测试,周末我收到了一些由该文件发送的空白电子邮件,我想这意味着有人在没有填写表单的情况下访问了该文件

  • 当有人导航到我的php文件时,我是否使用了正确的if语句来阻止代码运行
  • 我怎样才能使除了webform之外的任何人都无法访问.php
  • 我犯过什么明显的错误吗

    <?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语句来阻止代码运行

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

    我怎样才能使除了webform之外的任何人都无法访问.php

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

    我犯过什么明显的错误吗

    <?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收到一封空白电子邮件意味着有人修改了一份网络表单?我将研究实现一个令牌。验证也是我必须研究的,谢谢