PHP,MySQL:安全问题;页面以奇怪的方式加载

时间:2010-05-31 13:06:56

标签: php .htaccess

我正在测试我网站的安全性。我使用以下URL在我的网站上加载一个PHP页面,在localhost:

http://localhost/domain/user/index.php/apple.php

当我这样做时,页面没有正常加载;相反,页面中使用的图像,图标只是从页面中消失/消失。仅显示文字。此外,在我点击此页面的任何链接上,它再次将我带到同一页面,而无需导航到所需的页面。因此,如果我有其他页面的超链接,例如“SEARCH”,它指向search.php,而不是导航到search.php页面,它会刷新index.php页面,只需将目标页面的页面名称附加到URL的结尾。

例如,假设我使用了上面的链接。然后它会加载index.php页面减去图像。当我点击“搜索”链接导航到搜索页面时,我在URL中看到以下内容:

http://localhost/domain/user/index.php/search.php

我的.htaccess文件中的重定向配置为404错误页面,但页面没有重定向到404错误页面。请注意上面网址末尾的 search.php 。我点击的任何其他链接,重新加载index.php页面,只是将目标页面名称附加到URL的末尾,如上所示。

我期待看到404错误,但这不会发生。该网址甚至无法加载页面,因为我的网站中没有“index.php”文件夹

我该怎么做才能解决这个问题?感谢所有帮助。

更新

安全问题是用户能够查看不存在的页面(这是非常误导性的),例如http://localhost/domain/user/index.php/apple.php,尤其是当它不存在时。这让我觉得这将为黑客利用网站并破坏其完整性敞开大门。在这种情况下会发生这种情况吗?我希望用户看到404错误页面,并且我愿意在.htaccess文件中进行任何更改以适应这一点。

你能否告诉我一些我可以添加到我的.htaccess文件中的代码来实现这个目标?

谢谢。

EDIT1:

以下是我的.htaccess文件的内容。我有2个。一个在域根目录,另一个在“用户”文件夹/目录中。

/*.htaccess in domain root*/
ErrorDocument 404 /domain/404.php

/*.htaccess in user folder*/
ErrorDocument 404 /domain/user/404.php

EDIT2:

@Pekka感谢您的链接。我在.htaccess文件中添加了以下代码(在用户目录中)

<Files "mypaths.php">
Options +Includes
SetOutputFilter INCLUDES
AcceptPathInfo Off
</Files>

但是这仍然没有显示404页面。对不起,我是.htaccess的新手。希望你能告诉我我错了。感谢。

2 个答案:

答案 0 :(得分:2)

加载页面的原因:

http://localhost/domain/user/index.php/apple.php

很容易解释。请求将传递到index.phpapple.php位于$_SERVER["PATH_INFO"]变量中。

因此,就服务器和PHP脚本而言,您位于/user目录中。

这也是没有404出现的原因:无论您指定哪个文件作为最后一个文件,始终都会找到index.php

但是,浏览器不会将index.php解释为文件,而是解释为apple.php父目录

因此,您放在页面上的每个相对链接(例如contact.php)都是这样提取的:

 http://localhost/domain/user/index.php/contact.php

显然无效。

您可能想要做的是在图像和链接中使用绝对路径,但无论如何,这与安全性无关。

作为旁注,这整个现象有时用于创建搜索引擎友好的URL,而不必使用mod_rewrite模块。

您可以使用AcceptPathInfo指令关闭此行为。

答案 1 :(得分:0)

至于图像,你只需要学习使用绝对路径来制作图像,这是绝对必要的

而不是images/head.jpg/images/head.jpg,您将拥有所有图片和样式。

至于/user/index.php/apple.php - 你为什么要这么奇怪的地址呢? 为什么不只使用user/apple.php

问题的安全性在哪里?