Php 什么';保护我的框架免受未登录访问者攻击的最佳技术是什么?

Php 什么';保护我的框架免受未登录访问者攻击的最佳技术是什么?,php,security,logging,frameworks,Php,Security,Logging,Frameworks,首先,我想说的是,我曾使用搜索框寻找类似的问题,但没有成功,可能是因为我的英语能力差 我有一个“自制”的框架。我有一些PHP文件,必须只对管理员可见。我目前的做法是在每个页面内检查会话是否已打开。如果没有,用户将被重定向到404页面,看起来请求的文件不存在 我真的不知道这是否能保证有效,或者是否有更好、更安全的方法,因为我目前处理的是一种永远不会公开的机密数据 你能给我一些提示吗?或者留下一个我可以找到的链接 非常感谢,再次请原谅我不查字典 编辑 我通常在每个文件的顶部写的是这样的 <?p

首先,我想说的是,我曾使用搜索框寻找类似的问题,但没有成功,可能是因为我的英语能力差

我有一个“自制”的框架。我有一些PHP文件,必须只对管理员可见。我目前的做法是在每个页面内检查会话是否已打开。如果没有,用户将被重定向到404页面,看起来请求的文件不存在

我真的不知道这是否能保证有效,或者是否有更好、更安全的方法,因为我目前处理的是一种永远不会公开的机密数据

你能给我一些提示吗?或者留下一个我可以找到的链接

非常感谢,再次请原谅我不查字典

编辑

我通常在每个文件的顶部写的是这样的

<?php
include("sesion.php");
$rs=comprueba(); //'check'

if ($rs) { 
?> 

然后,在最后

<?php 
}
else { header("Location: err404.html"); }
?>

这是一份很糟糕的工作,不是吗

编辑

假设我在一个名为
customers.php

该文件当前可能在
http://www.mydomain.com/admin/customers.php
并且它必须仅对管理员用户可见。管理员用户登录后,我创建一个会话变量。该变量是我在每页顶部检查的变量,如果它存在,则显示客户列表。如果没有,用户将被重定向到404页面


谢谢你的耐心。我真的很感激。

如果我对您的问题解释不正确,我深表歉意,但我认为您提出的是保护框架中使用的各个PHP页面不被键入URL的人查看的最佳方法

如果是这样的话,我发现最好的方法就是在主文件(通常是index.php)中声明一个常量


我强烈建议您使用会话

现在,我认为有两种方法可以做到这一点

我能想到的最简单的方法是:创建一个session.php文件,并在应用程序中的每个文件中包含/要求它

在session.php中,对用户成功登录时可以定义的安全令牌进行会话检查(最好是加密的salt字符串)

编辑: 我在session.php文件中所做的是die();或使用header()重定向;如果未检测到正确的会话

如果需要,可以添加一个“公共”文件数组,以便在当前正在执行其中一个文件时跳过会话检查

另一种更难的方法(仍然使用会话和令牌验证)是创建一个调度程序文件,该文件检查会话,然后将请求重定向到呈现请求操作的视图

如果应用程序中的安全性至关重要,您应该阅读以下指南:由php安全联盟提供。


<?php
$logged_in = 'no';
include("session.php"); // changes $logged_in to yes if logged in

if($logged_in == 'no'){
header("Location: login.php?error=notloggedin");
exit;
}
?>

你可以把它放在你的所有页面的顶部,或者简单地把它放在你的SeStudi.PHP文件中,或者把头文件.PHP文件包含在所有的页面中。

@ Hermet:不用担心你的英语技能,我不会认为它很差。我改正了一些语法错误,但总的来说,你的英语比我看到的许多帖子要好得多。然而,你问的问题还是有点不清楚。你能提供一个具体的例子来说明你想阻止什么吗?@Hermet:请描述一下你所说的“未被跟踪的访客”是什么意思。或者,描述一下你试图阻止的行为。@Hermet:谢谢。我相信我完全理解您想要完成的任务,我认为当@dabito说,“我能想到的最简单的方法是:创建一个session.php文件,并在应用程序中的每个文件中包含/要求它”时,他几乎准确地描述了您当前的工作。感谢Josh留在这里。所以你是说我现在使用的方式没那么糟糕,是吗?@Hermet:是的!这与我在一些应用程序中所做的非常相似。谢谢Jarrod,你的方式比我通常使用的方式简单得多。@Hermet:请注意,@Jarrod所解释的方式与我现在理解的你要问的问题不同。这只是一种不同的方式。。管理员登录后可以声明该常量,然后在每个文件中检查该常量。。然而,如果你们说它实际上是安全的,我将继续使用这种方式(dabito所描述的)。非常感谢@Hermet:定义这样一个常量有助于保护用户不访问他们不应该访问的特定页面,因此如果您的
admin.php
页面包含
functions.php
,您可以在
functions.php
中检查define以查看是否首先加载了
admin.php
。这会阻止人们在浏览器中访问
functions.php
。同上@Josh。此方法仅适用于防止人们运行从未打算运行的文件。另一个提示是——在框架的每个文件夹中都有一个“index.html”——如果您还没有配置Apache/IIS来阻止这样的视图,这将阻止人们获取框架的目录列表。+1:这回答了一个与@Jarrod的问题根本不同的问题,但是您正在解决的问题,@dabito,你说得很好。再一次,我不知道问题是关于哪一个…谢谢dabito,我可以用什么来代替会话@乔希,我已经用我现在的方式来回答前一个问题了。这也许能更好地解释我想做什么。谢谢。@dabito:我想他特别想通过隐晦的方式抛出一个404来保证安全性,也就是说,
die('access denied')
泄露了这是一个受保护的资源,404使URL看起来是无效的,而实际上它是有效的,只是不适合那个用户@乔希,我可以请你做我的私人翻译吗-D@Hermet:当然!但我的折扣率$0.00/小时仅适用于StackOverflow;-)如果我在浏览器中阻止
位置
标题怎么办?你应该
<?php
defined( '_MYAPP' ) or die( 'No access.' );
<?php
$logged_in = 'no';
include("session.php"); // changes $logged_in to yes if logged in

if($logged_in == 'no'){
header("Location: login.php?error=notloggedin");
exit;
}
?>