从AJAX$向PHP发布包含文本“或”| |“和”的数据时,请求将以“错误403禁止”结束

从AJAX$向PHP发布包含文本“或”| |“和”的数据时,请求将以“错误403禁止”结束,php,ajax,boolean-operations,Php,Ajax,Boolean Operations,我有一个解决这个问题的方法,但我一生都无法确定问题是在我的AJAX或PHP代码中,还是只是缺少了什么。 我已经包含了创建RSS XML提要文档的源代码。我首先创建一个对象数组来存储将提供给AJAX的键控数据,然后调用创建提要文档的PHP脚本。适用于以下奇怪的布尔运算符单词异常。 1.如果任何键控数据包含单词“or”,后跟一个空格,后跟任意数字,那么PHP脚本在尝试访问$\u REQUEST或$\u POST变量时出错403。 2.如果任何键控数据包含单词“and”,后跟空格,后跟任何数字,那么P

我有一个解决这个问题的方法,但我一生都无法确定问题是在我的AJAX或PHP代码中,还是只是缺少了什么。 我已经包含了创建RSS XML提要文档的源代码。我首先创建一个对象数组来存储将提供给AJAX的键控数据,然后调用创建提要文档的PHP脚本。适用于以下奇怪的布尔运算符单词异常。 1.如果任何键控数据包含单词“or”,后跟一个空格,后跟任意数字,那么PHP脚本在尝试访问$\u REQUEST或$\u POST变量时出错403。 2.如果任何键控数据包含单词“and”,后跟空格,后跟任何数字,那么PHP脚本在尝试访问$\u REQUEST或$\u POST变量时出错403。 这是我的密码: ajax\u或php\u bug\u main.php

rss_save_feed.php


这很可能是web服务器上的某种安全模块/过滤器。您使用的是什么web服务器?我在IIS中看到了类似的问题,我知道nginx有一个过滤模块。因此,只需检查web服务器日志。

在ajax\u或php\u bug.js中

items = items.replace(/or/g,"0987654321"); 
items = items.replace(/and/g,"1234567890"); 
用这个

items = items.replace("/or/g","0987654321"); 
 items = items.replace("/and/g","1234567890");

我只是在HTTPME.com托管的网站上遇到了同样的问题。我想你使用的不是同一台主机吧?我刚刚向他们开了一张罚单,要求他们将我的网站或他们需要做的任何事情列入白名单,因为我的PHP代码中已经有逻辑,可以删除用户可能尝试注入的任何潜在危险逻辑。几个月前,当我发现我不能再使用“退出”这个词或任何在我的任何网页表单中嵌入“退出”这个词的词时,我不得不为同样的事情开罚单。当时,他们告诉我它是由ModSecurity规则触发的。

我已经测试过了,这里一切正常……您在表单中填充的确切值是什么?你使用的是什么版本的php?如果你用一个合适的版本替换它,你可能不会有任何问题。你甚至试图正确地逃避事情。你只是希望并祈祷在你的输入中没有什么不寻常的地方。我相信这是apache。你知道我认为你可能是对的。我记得看过一段关于SQL注入的youtube视频,视频中显示了一个WHERE子句,比如WHERE email='any_value'或'1'='1,它总是返回true。只是为了确保我会联系我的网络提供商确认这样的过滤器。谢谢!!这就是答案,我将坚持我的解决办法。如果有人感兴趣,我找到了演示SQL注入的视频,我的验证程序已经验证了过滤器。视频链接:。我可以想象,如果有人运行的脚本没有错误,那么也许他们也应该研究过滤。无论如何,再次感谢你的帮助,我已经挣扎了三天了。继续努力!Opps视频链接不好,这里有一个好链接:谢谢,无论哪种方式,解决方法都很好。问题是问题的根源是什么。
<?php
if(!isset($_REQUEST)){
die('Too bad!');
}
//this next line blows with "Error 403 Forbidden" if data contains "or #"||"and #"
//it doesn't matter if the data is an array, xml or text being passed
//not sure if the problem is related to ajax or php???
$args = $_REQUEST['feedarray'];
if($args){
//Create the RSS Feed
$rss = '';
$rss .= '<?xml version="1.0" encoding="utf-8"?>';
$rss .= '<?xml-stylesheet type="text/xsl"?>';
$rss .= '<rss version="2.0">';
$rss .= '<channel>';
$rss .= '<title>' . $args[title] . '</title>';
$rss .= '<description>' . $args[subtitle] . '</description>';
$rss .= '<pubDate>' . date(DATE_RSS, strtotime("now")) . '</pubDate>';
$rss .= '<location>' . $args[location] . '</location>';
$items = $args[items];
//$items = str_replace("0987654321","or",$items); //UNCOMMENT FOR WORKAROUND
//$items = str_replace("1234567890","and",$items); //UNCOMMENT FOR WORKAROUND
$items = explode("\n",$items);
foreach($items as $item){
$rss .= '<item>';
$rss .= '<description>' . $item . '</description>';
$rss .= '<pubDate>' . date(DATE_RSS, strtotime("now")) . '</pubDate>';
$rss .= '</item>';
}
$rss .= '</channel>';
$rss .= '</rss>';
//file_put_contents($args[filename], $rss);
echo $rss;
}
?>
items = items.replace(/or/g,"0987654321"); 
items = items.replace(/and/g,"1234567890"); 
items = items.replace("/or/g","0987654321"); 
 items = items.replace("/and/g","1234567890");