gpt4 book ai didi

php - 提交简单的 PHP 表单时出现禁止错误

转载 作者:搜寻专家 更新时间:2023-11-01 04:41:25 24 4
gpt4 key购买 nike

我有一个不复杂的问题......似乎比它应该的更复杂。

我有一个用于向网站添加内容的简单表单。有些字段需要输入 html。但是,当您将某些 html 元素输入到表单的不同部分时,它会认为它讨厌您并抛出禁止的 403 错误。这是下面的表格:

<?php
$data = f("SELECT * FROM table WHERE id = '{$_GET['id']}'");
?>
<form action="<?=$_SERVER['PHP_SELF']?>?id=<?=$_GET['id']?>&action=edit" method="post">
<table cellspacing="0" cellpadding="2" border="0">
<tr>
<td><b>Title:</b></td>
<td><input type="text" name="title" style="width: 300px;" value="<?=$data['title']?>" /></td>
</tr>
<tr>
<td><b>URL:</b></td>
<td><input type="text" name="url" style="width: 300px;" value="<?=$data['url']?>" /></td>
</tr>
<tr>
<td><b>Sub-Category:</b></td>
<td>
<select name="subCategoryId">
<option value=""></option>
<option value="1">A</option>
<option value="2">B</option>

</select>
</td>
</tr>
<tr>
<td><b>Short Description:</b></td>
<td><textarea name="shortDescription" rows="6" cols="60"><?=$data['shortDescription']?></textarea></td>
</tr>
<tr>
<td><b>Template:</b></td>
<td><textarea name="template" rows="6" cols="60"><?=$data['template']?></textarea></td>
</tr>
<tr>
<td><b>Ads:</b></td>
<td><textarea name="ads" rows="6" cols="60"><?=$data['ads']?></textarea></td>
</tr>
<tr>
<td><b>Keywords:</b></td>
<td><textarea name="keywords" rows="6" cols="60"><?=$data['keywords']?></textarea></td>
</tr>
<tr>
<td><b>Questions:</b></td>
<td><textarea name="questions" rows="6" cols="60"><?=$data['questions']?></textarea></td>
</tr>
<tr>
<td><b>Salary:</b></td>
<td><textarea name="salary" rows="6" cols="60"><?=$data['salary']?></textarea></td>
</tr>
<tr>
<td><b>Jobs:</b></td>
<td><textarea name="jobs" rows="6" cols="60"><?=$data['jobs']?></textarea></td>
</tr>
<tr>
<td><b>Meta Description:</b></td>
<td><input type="text" name="metaDescription" style="width: 300px;" value="<?=$data['metaDescription']?>" /></td>
</tr>
<tr>
<td><b>Meta Keywords:</b></td>
<td><input type="text" name="metaKeywords" style="width: 300px;" value="<?=$data['metaKeywords']?>" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="submit" value="Edit Job" /></td>
</tr>
</table>
</form>

我有其他形式可以毫无问题地遵循相同的模式。为了进一步使这一点更加困惑,它只会在文本区域中提供任何 2 个 html 元素时抛出此错误(它可以很好地处理一个 html 元素)。文本区域是广告、关键字、薪水和工作。其他文本区域会很好,但这 4 个不会。如果我能让这更困惑一点,如果我简单地在这些字段中输入文本并保存它,它就可以毫无问题地运行。

为了处理发布数据,我只使用 mysql_real_escape_string() 来处理数据,我没有使用 strip_tags(),因为我需要其中的 html。

这是一个可以用 .htaccess 修复的奇怪的 apache 错误吗? PHP 中是否有与此冲突的模块?

--------编辑这里是答案--------

Ben 提出了一个很好的答案,这可能是问题所在,但由于缺乏权限,我无法修复它。因此,我根据 Gerben 给我的想法创建了一个 onsubmit 事件,并编写了以下 javascript。

function awesome() {
elements = document.forms[0].elements;
for(var i = 0; i < elements.length; i++) {
switch(elements[i].name) {
case "ads":
case "shortDescription":
case "template":
case "questions":
case "salary":
case "jobs":
str = elements[i].value;
elements[i].value = str.replace(/</g,"#@!");
break;
}
}
return true;
}

然后在接收端,我做了一个str_replace来替换#@!回到 < ,这至少让事情成功了。

我骑在马上....哇!

感谢您的帮助。 :)

最佳答案

鉴于您能够发帖,并且您的后期处理显然非常简单,因此不太可能抛出 403 错误或重定向到禁止目录,我冒昧地猜测您正在运行apache 级别的防火墙。查看您的 apache 配置文件,并检查您是否正在运行 mod_security 或加载的任何其他防火墙模块。可以通过多种方式配置 mod_security,包括扫描 POST 数据中的 html 内容并做出相应的 react 。如果它配置为防止 html 注入(inject),这可能是您的问题(请参阅此处的配置详细信息:http://www.modsecurity.org/projects/modsecurity/apache/feature_content_injection.html)。

要对此进行测试,请尝试将 htaccess 文件添加到您的 Web 根目录(假设您被允许使用 htaccess 覆盖 apache 设置)并设置:

SecFilterEngine Off

重新启动 apache,然后查看它是否仍在发生。

如果这是一个共享主机,或者您无法修改 Apache 设置,您可以尝试使用 javascript 的解决方法 base64 encodes提交 (onsubmit) 之前的所有数据,然后在处理它的 php 脚本中使用 base64_decode($_POST[key])。

关于php - 提交简单的 PHP 表单时出现禁止错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24909326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com