联系表格在提交时提供“ 403禁止访问”

时间:2018-11-23 18:16:36

标签: php

我的联系表格具有以下html和php代码。首先,当网站被实时上传时,它就可以工作了。几天后,我注意到联系表单在提交时给出了403禁止的错误。我已将文件许可权更改为755,并且工作了很短的时间,然后又回到了403禁止访问。不知道我的php或html是否有问题。请帮忙。

HTML代码:

<form action="email.php" method="post">
            <div class="col-md-12">
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            <input type="text" class="form-control" name="first-name" placeholder="First Name">
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="form-group">
                            <input type="text" class="form-control" name="last-name" placeholder="Last Name">
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="form-group">
                            <input type="text" class="form-control" name="email" placeholder="Email">
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="form-group">
                            <input type="number" class="form-control" name="phone" placeholder="Phone">
                        </div>
                    </div>
                    <div class="col-md-12">
                        <div class="form-group">
                            <textarea name="message" class="form-control" id="" cols="30" rows="7" placeholder="Message"></textarea>
                        </div>
                    </div>
                    <div class="col-md-12">
                        <div class="form-group">
                            <input type="submit" value="Send Message" class="btn btn-primary">
                        </div>
                    </div>
                </div>
            </div>
            </form>

PHP代码:

<?php 
$firstname = $_POST['first-name'];
$lastname = $_POST['last-name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$formcontent="From: $firstname $lastname \n Email: $email \n Phone: $phone 
\n Message: $message";
$recipient = "main@yaxcheadventuretours.com";
$subject = "Contact Form from $firstname $lastname";
$mailheader = "From: $firstname $lastname $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo' 
<script>
window.onload = function() {
    alert("Thank You for reaching out to us!");
    location.href = "contact.html";
}
</script>
';
?>

3 个答案:

答案 0 :(得分:0)

10.4.4 403禁止

服务器理解了该请求,但拒绝执行该请求。授权将无济于事,不应重复该请求。如果请求方法不是HEAD,并且服务器希望公开为什么未满足请求,则应在实体中描述拒绝原因。如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到)代替。

该免责声明似乎包含多个HTML标记,并且显然它们在页面上未转义地显示。

我的疯狂猜测是,服务器上安装了一个拒绝输入的软件(可能是mod_security),因为它认为这是尝试执行XSS攻击。您可以通过暂时删除<和>符号,然后再将其粘贴到文本区域中来确认(或拒绝)该假设。

答案 1 :(得分:0)

尝试查看服务器错误日志,这将对您有帮助,您可以从那里获取详细信息

此外,您正在重定向到contact.html页面

location.href = "contact.html";

检查.htaccess是否对.html文件有任何限制

如果您没有看到此文件,则可以更改设置以查看隐藏的文件。

答案 2 :(得分:0)

我有同样的问题,我用js编码textarea值并按以下方式发送来解决:

<form onsubmit="return validateForm()" method="post"
      action="...">

    <textarea id="text0" name="text0"></textarea>

    <input type="hidden" name="t0" id="t0"/>
    
    <button id="form_submit_btn" type="submit">
        create
    </button>
</form>

对内容进行编码,不要忘了清晰的textarea值

function validateForm() {
        var text0 = document.getElementById('text0');
        var t0 = document.getElementById('t0');
        
        t0.value = b64EncodeUnicode(text0.value);
        $("#text0").empty();
        
        return true;
    }

function b64EncodeUnicode(str) {
        return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
            function toSolidBytes(match, p1) {
                return String.fromCharCode('0x' + p1);
            }));
    }

最后,在php中获取数据并解码

$t0 = $_POST['t0'];
$t0 = base64_decode($t0);

您也可以阅读此答案:link

如果不起作用,请在提交文本或将其设置为错误格式之前清空您的文本