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

问题描述 投票:0回答:1

哪个有更高的安全性?

将PHP文件包含在网页上以供表单使用,或者在用户按下表单按钮时将用户导向PHP文件?

示例1:包含'filename';示例2:form action =“sendingtheuserhere.php”method =“post”

谢谢

php html forms security web
1个回答
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 = '[email protected]';

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 = '[email protected]';

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

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

现在,在上面的代码中,我们做的第一件事就是检查POST请求是否确实存在。如果没有,你会看到“Form not filled”。在那之后,为了使请求对任何类型的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 = '[email protected]';

    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>
© www.soinside.com 2019 - 2024. All rights reserved.