这种根据URL查看页面的特定方法的优点和缺点是什么?
据我所知,构建网页有两种基本方法:
- www.whatever.com/index.php?page=userProfil.php
-
www.whatever.com/userProfil.php
好吧,我将点称为 1 和 2 模型,并假设我想使用 php + mysql + apache + 客户端 javascript(用于用户检查) - 仅用于背景信息。如果我使用 sererlets、jsp 和 Tomcat,模型的基本思想几乎是相同的,但我认为会有一些小的差异。所以结束它由我的平台是 php +mysql ...
另一件事是,出于安全和未来证明的目的(将平台从 php 更改为另一个)显示".php"或".html"或任何文件类型都不是好主意(听说)。
所以可以选择使用它(对于漂亮的网址): - www.whatever.com/userProfile/
如果我用谷歌搜索得很好,它被称为mod_rewrite,我使用一些规则将我的模型(参见添加 1 和 2)转换为添加 3。
让我们感到荣幸,我现在实际上不太了解添加 3。
所以:
- 我认为模型 1 和 2 我可以称之为"文件结构模型"。我的意思是add1我有一个页面(一个文件)并包含一些模块。所以在添加 1 中,我每次调用一个文件。添加 2 我每个页面都有新文件。因此,对于添加 2,我调用多个文件 - 对于不同的页面不同的文件。
- 对于添加 3,第 1 点和第 2 点对用户来说是隐藏的 - 我认为这很好,因为他不知道我的文件结构(它的 + 为了安全起见),它看起来更好,用户可读性更好。
结论和问题:
-
加 1 和 2 的优缺点 - 文件结构
-
加3的优缺点
-
基本概述 abouve add 1 和 2 结合 add 3(1,2 文件结构 + add 3 是什么样子的)
-
我知道如何使用加 1 和 2,所以我可能使用其中一个,后来我想添加加 3(当我把它放到时) - 可能吗?
好的,所以你的问题是有道理的,但是使用你的编号和描述来构建PHP网站的最佳和最实用的方法是通过选项1和选项3添加,以获得通常所谓的SEO友好(又名:人类可读,漂亮,简单等)网址。
从实际的角度来看,构建一个系统以便所有调用都通过一个通用的index.php
文件,作为编码人员,一开始就要承担一些繁重的工作。 但你猜怎么着?你是一个程序员,正在创建一个工具,它应该具有尽可能多的长期稳定性和安全性。 因此,尽可能多地向选项 1 编码符合您的最佳利益,也是您网站的最佳利益。
从安全的角度来看,很容易解释为什么选项 1 一直获胜。通过index.php
解析内容请求,您可以轻松地针对一个区域中可能遇到的任何安全问题进行编程,而不是将自己分散在大量文件和功能中。 因此,假设您发现了一个安全漏洞并知道如何修复它。 通过让所有内容都经过index.php
及其所依赖的文件,您可以在站点核心代码中添加补丁,以便无论您有 1、10、100 甚至 1,000 个页面或更多,都可以修补漏洞。
此外,在 2013 年,您不应该将文件名用于 URL 调用。 创建"漂亮"URL 的选项 3 解决了这个问题。 它会将您的实际文件系统 URL 与世界联系起来。它隐藏了你确实在使用PHP的事实。 请注意,任何安全计划的一部分,如果你确保你的网站不会通过标题向世界宣布你正在使用PHP,但这个概念不在这个问题的范围之内。
此外,拥有遮盖代码的漂亮URL的好处是:假设你厌倦了PHP,想转向Python或Ruby进行编码。 好吧,现在由于底层编程语言被掩盖了,您现在可以用另一种语言重新编程您的网站,只要您确保脚本对生病的网站 URL 做出预期反应,您就可以开始了。
第一种方法有一个明显的安全问题:恶意用户很清楚您正在根据用户输入包含文件,因此您应该正确清理page
变量并确保包含密码等敏感数据的文件不可用于包含(即仅省略page
中的字母数字字符 [无.
, ..
,/
,空字节,Unicode特殊字符等],只允许包含".php"文件扩展名,将敏感数据与调用脚本不在同一目录中,甚至放在www-root之外等等)。
第二种方法是更好的IMO,没有明确的文件包含。但它表明你正在使用的PHP不一定是坏的,但理论上可以缩小攻击者对可能漏洞的搜索范围(想象一下,有人在PHP中发现了一个关键漏洞,然后世界各地的网站都被核武器,因为脚本小子通过谷歌搜索受害者inurl:index.php
)。
这两种方式都有其SEO问题(第一种方式比第二种有更多的陷阱)。就像您希望迁移到另一个平台一样,正如您所写的那样,您要么需要模拟".php"扩展,要么由于URL更改而丢失一些流量(即使设置了重定向)。
我个人更喜欢第三种方法。在 Apache 服务器上设置并不难,基本上需要几行.htaccess
(当然,您可以自定义所有内容):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php
引入这些行后,您将获得对不存在文件的所有请求,这些请求被馈送到您的索引.php。然后,您需要解析和清理应用程序中$_SERVER['REQUEST_URI']
变量,并从数据库、文件或其他任何地方检索页面。通过这种方式,您将获得非常友好的 URL,并向攻击者披露更少的信息(至少对没有经验的人来说,除了查看文件扩展名之外,还有很多其他方法可以知道您的网站在哪个平台上运行)。