我正在测试我网站的安全性。我使用以下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的新手。希望你能告诉我我错了。感谢。
答案 0 :(得分:2)
加载页面的原因:
http://localhost/domain/user/index.php/apple.php
很容易解释。请求将传递到index.php
,apple.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
?
问题的安全性在哪里?