0

我犯了一个小错误(我在现有的 php 调用中开始了一个新的 php 调用 - 哎呀)并设法让谷歌开始抓取一大堆如下所示的网址:

http://www.mydomain.com/folder/parameter/%3C/?php%20echo%20writelink();%20?%3E

我已经修复了采购调用,但我尝试让 .htaccess 重写页面调用

http://www.mydomain.com/folder/parameter/

一直没有成功。

我尝试了以下方法:

RewriteRule  ^folder/(.*)/(.*)%(.*) /folder/$1/ [NE,R=301,L]
RewriteRule  ^folder/(.*)/(.*)3C/?php /folder/$1/ [R=301,L]
RewriteRule  ^folder/(.*)/(.*)writelink /folder/$1/ [R=301,L]
RewriteRule  ^folder/(.*)/([^/.]+)writelink /folder/$1/ [R=301,L]

但是它们都返回相同的 403。我将测试重写器作为文件中的第一个重写器,所以它没有被其他东西篡夺。

(作为参考,当我没有弄脏页面时,正确的重写规则是 RewriteRule ^folder/(.*)/$ /content/element.php?param=$1 [L] )

我之前在路径中遇到过 %ages 问题,但这次我决定打败它——有什么建议吗?

4

1 回答 1

1

你的网址是这样的:

http://www.mydomain.com/folder/parameter/</?php echo writelink(); ?>没有编码。

304 代码并不真正表示错误,它表示请求的 URL 的资源自上次访问或缓存以来没有更改。清除浏览器的缓存并确保已清除。

由于初始字符,错误应该是 403(禁止)< (%3C)

这些错误使 .htaccess 中的任何重写规则都无用。处理此类问题的一种方法是使用脚本。

例子

将这些行添加到根目录下的 .htaccess 文件中:

Options +FollowSymlinks -MultiViews
ErrorDocument 403 /Error403.php

在根目录下创建 Error403.php,内容与此类似:

<?php
// The following lines should be at the top of the file

/**************Only for Debugging**********************/
echo $_SERVER[ 'REDIRECT_QUERY_STRING' ] . "<br /><br />"; 
echo var_dump($_REQUEST) . "<br /><br />";
/*=====================================================
NOTE: A Header error might be generated while the above 
code is active. Use it only to display the incoming 
parameters and delete it for normal operation.
*******************************************************/

if ( isset ( $_SERVER[ 'REDIRECT_QUERY_STRING' ] ) ) {
  $QueryString = $_SERVER[ 'REDIRECT_QUERY_STRING' ]; // The query looks like this: php%20echo%20writelink();%20?%3E 

   // Check if it is the wrong URL
  if ( preg_match( '|php%20echo%20writelink()|i', $QueryString ) ) {
  header("Location: http://www.mydomain.com/folder/parameter/");
  }
}
   // Handle other errors
?>

在这种特定情况下,我们利用字符串包含问号这一事实,?使其看起来像一个查询。所以我们尝试将查询内容与preg_match().

那应该这样做。如有必要,相应地修改链接,这只是一个如何做的例子。

于 2013-01-27T09:26:50.760 回答