![]() |
1
206
将此添加到只希望包含的页面
然后在包含它的页面上添加
|
![]() |
2
182
对于一般的“在Apache服务器上运行的PHP应用程序,您可以完全控制,也可以不完全控制”情况,最简单的方法是将您的include放在一个目录中,并拒绝对.htaccess文件中该目录的访问。为了避免人们使用谷歌搜索的麻烦,如果您使用的是Apache,请将其放入一个名为“.htaccess”的文件中,该文件位于您不希望访问的目录中:
|
![]() |
3
118
我有一个文件,当它被包含时,我需要采取不同的行动,而当它被直接访问时(主要是
正在访问的文件始终是包含的文件,因此==1。 |
![]() |
4
36
防止直接访问文件的最佳方法是将文件放在web服务器文档根目录之外(通常为一级以上)。您仍然可以包含它们,但不可能有人通过http请求访问它们。 我通常会一直这样做,并将所有PHP文件放在文档根目录之外,而不是 bootstrap file -文档根目录中的一个单独的index.php,开始路由整个网站/应用程序。 |
![]() |
5
36
1:检查包含文件的计数
逻辑: 如果未满足最小包含计数,PHP将退出。请注意,在PHP5之前,基页不被视为包含。 2:定义和验证全局常量
逻辑: 为了跨升级和未来更改的可移植性,将此身份验证方法模块化将显著减少编码开销,因为更改不需要硬编码到每个文件。
这样就可以将其他代码添加到
可移植性的绝妙想法来自于 this answer . 3:远程地址授权
此方法的缺点是独立执行,除非内部请求中提供了会话令牌。如果是单服务器配置,则通过环回地址进行验证;如果是多服务器或负载平衡服务器基础结构,则通过地址白名单进行验证。 与前面的方法类似,可以使用GET或POST将授权令牌传递给include文件:
这是一种非常混乱的方法,但如果使用正确的方式,可能也是最安全和通用的方法。 5:特定于Web服务器的配置
例如,在APACHE中,配置存储在
笔记 但是,我不推荐特定于服务器的配置,因为它们不利于跨不同web服务器的可移植性。在像内容管理系统这样的情况下,拒绝算法很复杂,或者被拒绝的目录列表相当大,这可能只会使重新配置会话变得相当可怕。最后,最好在代码中处理这个问题。 6:将包含放置在站点根目录之外的安全目录中由于服务器环境中的访问限制,最不受欢迎,但如果您可以访问文件系统,这是一种非常强大的方法。
逻辑:
请原谅我的非正统编码惯例。任何反馈都将不胜感激。 |
![]() |
6
30
|
![]() |
7
14
这样,如果文件不知何故放错了位置(错误的ftp操作),它们仍然受到保护。 |
![]() |
8
8
我曾经遇到过这个问题,解决方法是:
但理想的解决方案是将文件放在web服务器文档根目录之外,如另一个anwser中所述。 |
![]() |
9
8
我想限制对网络的访问
直接存档,也可以通过
|
![]() |
10
7
将其放在index.php中
此检查应在每个链接文件中运行(通过require或include)
|
![]() |
11
4
最简单的方法是在调用include的文件中设置一些变量,例如
|
![]() |
12
4
|
![]() |
13
4
我的答案在方法上有些不同,但包括这里提供的许多答案。我建议采取多管齐下的办法:
这个
所以我知道这个问题要求“最简单”,但我认为这需要更多的“防御性编码”。 我的建议是:
我发现这一策略让开发变得更加有趣,但却少了很多:
|
![]() |
14
3
同级 作为pub/。类似这样的情况(不理想,但你知道了):
您将web服务器设置为使用pub/as文档根目录。这为您的脚本提供了更好的保护:虽然它们可以从文档根目录中访问以加载必要的组件,但不可能从internet访问这些组件。除了安全之外的另一个好处是,一切都在一个地方。 此设置优于仅在每个包含的文件中创建检查,因为“不允许访问”消息是攻击者的线索,并且优于.htaccess配置,因为它不是基于白名单的:如果您弄错了文件扩展名,它将在lib/、conf/等目录中不可见。 |
![]() |
15
3
否则 正如大多数框架(如CodeIgniter)所建议的那样,可以将所有文件放在webroot目录之外,从而使它们不在http请求的范围内。
|
![]() |
16
2
更准确地说,您应该使用以下条件:
get_included_files() 返回包含所有包含文件的名称的索引数组(如果文件已被执行,则该文件已被包含,且其名称位于数组中)。 |
![]() |
17
1
将上面的代码放在包含的php文件的顶部。 前任:
|
![]() |
18
1
以下代码用于Flatnux CMS( http://flatnux.altervista.org
|
![]() |
19
1
我发现这个仅适用于php且不变的解决方案同时适用于http和cli: 定义一个函数:
上述针对此问题的大多数解决方案在Cli模式下不起作用。 |
![]() |
20
1
|
![]() |
21
1
|
![]() |
22
1
将include文件存储在web可访问目录之外已经提到过几次,如果可能的话,这无疑是一个好策略。但是,我还没有看到提到的另一个选项是:确保您的 不包含任何可运行的代码 我什么都不会做 . 它定义了一些函数,但是没有一个被调用,所以没有一个运行。
这同样适用于只包含PHP类而不包含其他类的文件。 尽可能将文件保存在web目录之外仍然是一个好主意。
|
![]() |
23
0
做一些类似于:
|
![]() |
24
0
您可以使用下面的方法,但它确实存在缺陷,因为它可能是伪造的,除非您可以添加另一行代码,以确保请求仅来自您的服务器,或者使用Javascript。 您可以将此代码放在HTML代码的主体部分,因此错误显示在那里。
这样结束它,这样错误的输出将始终显示在body部分中,如果您希望这样做的话。 |
![]() |
25
0
|
![]() |
26
0
您还可以对目录进行密码保护,并将所有php脚本保存在目录中,当然,index.php文件除外,因为在使用include时,不需要密码,因为只有http访问才需要密码。它将为您提供访问脚本的选项,以防您需要它,因为您将拥有访问该目录的密码。您需要为目录设置.htaccess文件和.htpasswd文件来验证用户。 如果您觉得不需要正常访问这些文件,您也可以使用上面提供的任何解决方案,因为您始终可以通过cPanel等访问它们。
|
![]() |
27
0
最简单的方法是将您的包含存储在web目录之外。这样,服务器就可以访问它们,但没有外部机器。唯一的缺点是您需要能够访问服务器的这一部分。好处是它不需要设置、配置或额外的代码/服务器压力。 |
![]() |
28
0
我没有发现.htaccess的建议很好,因为它可能会阻塞 该文件夹中您可能希望允许用户访问的其他内容,
|
![]() |
29
0
前面提到的添加了PHP版本检查的解决方案:
|
![]() |
30
0
您可以使用phpMyAdmin样式:
|