指向PHP文件或包含PHP文件的HTML表单

时间:2018-11-06 06:46:39

标签: php html forms security web

哪个安全性更高?

在网页上包含供表单使用的PHP文件,还是在用户按下表单按钮时将用户定向到PHP文件?

示例1:包含“文件名”; 示例2:表单action =“ sendingtheuserhere.php” method =“ post”

谢谢

1 个答案:

答案 0 :(得分:0)

通常,将包含处理表单数据的PHP代码包括到包含表单的文件中还是具有相同目的的单独PHP文件都没关系。

重要的是如何处理表单数据。下面是一个示例:

form.php-具有HTML表单

<html>
    <head></head>
    <body>
        <form action="send.php" method="post">
            <input name="subject" />
            <textarea name="message"></textarea>
            <button>Send</button>
        </form>
    </body>
</html>

send.php-处理表单数据

<?php

$user_subject = $_POST['subject'];
$user_message = $_POST['message'];

$send_to = 'myemail@gmail.com';

mail($send_to, $user_subject, $subject_message);

?>

现在有了上面的代码,您应该了解几件事。

  1. send.php文件包含不安全的代码。
  2. 访问send.php将向$ send_to发送电子邮件,以表明是否有人提交了表单。

现在,如果您必须分开文件,则每次访问send.php文件时,都会发送一封电子邮件。那就是您填写表格还是直接访问send.php链接。

第二,如果要合并两个文件,则每次有人打开您的表单时,您都会收到一封电子邮件。这是因为mail();函数每次都被触发。

要解决此问题,您必须确保仅在提交表单时触发邮件功能。您可以通过将send.php中的代码更改为以下内容来实现:

新send.php

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") { // checks whether a POST request actually exists or not.

    $user_subject = strip_tags(trim($_POST['subject']));
    $user_message = strip_tags(trim($_POST['message']));

    $send_to = 'myemail@gmail.com';

    mail($send_to, $user_subject, $subject_message);

} else {
    echo 'form not filled';
}
?>

现在,在上面的代码中,我们要做的第一件事是检查POST请求是否确实存在。如果没有,您将看到“表格未填写”。之后,为了使请求对任何类型的code injections都更加安全,我们使用了PHP trim();strip_tags();函数。

您可以像这样组合两个PHP文件:

form.php

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") { // checks whether a POST request actually exists or not.

    $user_subject = strip_tags(trim($_POST['subject']));
    $user_message = strip_tags(trim($_POST['message']));

    $send_to = 'myemail@gmail.com';

    mail($send_to, $user_subject, $subject_message);

}

?>

<html>
    <head></head>
    <body>
        <form action="form.php" method="post">
            <input name="subject" />
            <textarea name="message"></textarea>
            <button>Send</button>
        </form>
    </body>
</html>