Php 不允许直接访问
基本上,我有两个文件,在两个不同的目录中:index.php(in/login/)和index.php(in/login/buyer/) /login/buyer/index.php文件有:Php 不允许直接访问,php,security,brute-force,Php,Security,Brute Force,基本上,我有两个文件,在两个不同的目录中:index.php(in/login/)和index.php(in/login/buyer/) /login/buyer/index.php文件有: <?php session_start(); function isLoggedIn() { if(isset($_SESSION['valid']) && $_SESSION['valid']) return true; return false;
<?php
session_start();
function isLoggedIn()
{
if(isset($_SESSION['valid']) && $_SESSION['valid'])
return true;
return false;
}
//if the user has not logged in
if(!isLoggedIn())
{
header('Location: index.php');
die();
}
?>
<?php
if($_SESSION['valid'] == 1){
echo "<a href='../logout.php'>Logout</a>";
}
else{
echo "<a href='../index.php'>Login</a>";
}
?>
<!--
an form to login
-->
<?php
if($_SESSION['valid'] == 1){ #user has logged in by creating a session var
echo "<a href='logout.php'>Logout</a>";
}
else{
return true;
}
?>
/login/index.php文件有:
<?php
session_start();
function isLoggedIn()
{
if(isset($_SESSION['valid']) && $_SESSION['valid'])
return true;
return false;
}
//if the user has not logged in
if(!isLoggedIn())
{
header('Location: index.php');
die();
}
?>
<?php
if($_SESSION['valid'] == 1){
echo "<a href='../logout.php'>Logout</a>";
}
else{
echo "<a href='../index.php'>Login</a>";
}
?>
<!--
an form to login
-->
<?php
if($_SESSION['valid'] == 1){ #user has logged in by creating a session var
echo "<a href='logout.php'>Logout</a>";
}
else{
return true;
}
?>
这两个文件似乎工作正常,但比如说,一个恶意用户想要尝试直接访问
/login/buyer/
,而不提供凭据,只想在url的末尾尝试,比如mysite.com/login/buyer
,而不是登录。如何在其中添加另一个条件以停止此操作?您应该始终在每个页面上检查有效会话
看起来您的代码就是这样做的(尽管我的PHP已经生锈了)
如果是非买家登录并使用买家页面,则需要将权限/角色与每种类型的帐户关联,并在需要时检查适当的权限
例如,在买方页面上,您可以有如下内容
function isLoggedIn()
{
if(isset($_SESSION['valid']) && $_SESSION['valid'] && isset('isBuyer') && $_SESSION['isBuyer'])
return true;
return false;
}
您必须在登录时根据提供的用户ID填充$\u会话['isBuyer']。您应该始终在每个页面上检查有效会话 看起来您的代码就是这样做的(尽管我的PHP已经生锈了) 如果是非买家登录并使用买家页面,则需要将权限/角色与每种类型的帐户关联,并在需要时检查适当的权限 例如,在买方页面上,您可以有如下内容
function isLoggedIn()
{
if(isset($_SESSION['valid']) && $_SESSION['valid'] && isset('isBuyer') && $_SESSION['isBuyer'])
return true;
return false;
}
您必须在登录时根据提供的用户ID填充$_会话['isBuyer']。我建议对所有web访问使用单个
/index.php
文件(即“控制器”)
这样,您必须检查一次所有文件,以确定会话是否有效
使用参数告诉您要继续操作的“模块”和“操作”(Symfony 1.x词汇表)
例如,yoursite.com/index.php?module=user&action=login&type=buyer
,或者更好地使用.htaccess和路由引擎:yousite.com/user/login/buyer
正如我所建议的,最好将index.php
和其他源文件(不应通过Web服务器直接访问)放在单独的目录中
附加建议:
function isLoggedIn()
{
if(isset($_SESSION['valid']) && $_SESSION['valid'])
return true;
return false;
}
可以简单地改写为:
function isLoggedIn()
{
return (isset($_SESSION['valid']) && $_SESSION['valid']);
}
我建议对所有web访问使用一个
/index.php
文件(即“控制器”)
这样,您必须检查一次所有文件,以确定会话是否有效
使用参数告诉您要继续操作的“模块”和“操作”(Symfony 1.x词汇表)
例如,yoursite.com/index.php?module=user&action=login&type=buyer
,或者更好地使用.htaccess和路由引擎:yousite.com/user/login/buyer
正如我所建议的,最好将index.php
和其他源文件(不应通过Web服务器直接访问)放在单独的目录中
附加建议:
function isLoggedIn()
{
if(isset($_SESSION['valid']) && $_SESSION['valid'])
return true;
return false;
}
可以简单地改写为:
function isLoggedIn()
{
return (isset($_SESSION['valid']) && $_SESSION['valid']);
}
在到达实际付款页面或买家索引之前,强制用户再次登录被认为是终极安全 这是因为真正的授权信息在会话变量中是不安全的,因为PHP用来标识每个用户的会话ID通过GET变量(在URL中)或cookie传递。两者都很容易通过不安全的网络或XSS漏洞进行窃取
除了会话检查之外,您还应该有一个SSL加密的登录页面,以确保用户在进入网站的关键区域之前已登录 在到达实际付款页面或买家索引之前,强制用户再次登录被认为是终极安全 这是因为真正的授权信息在会话变量中是不安全的,因为PHP用来标识每个用户的会话ID通过GET变量(在URL中)或cookie传递。两者都很容易通过不安全的网络或XSS漏洞进行窃取
除了会话检查之外,您还应该有一个SSL加密的登录页面,以确保用户在进入网站的关键区域之前已登录
如果(!isLoggedIn()){header();die();}
部分不够好吗?我同意@Robus,一个没有从/index.php文件正确登录的用户将无法访问/login/buyer/index.php文件中的内容,因为您进行了检查,因此会话设置是的,但是如果我尝试只访问/登录/buyer/不通过url登录,它只是挂起一段时间,但实际上从未做任何事情。我不希望服务器挂起。。。我想让它做点什么有什么额外的安全措施我应该研究吗?如果(!isLoggedIn()){header();die();}部分足够了吗?我同意@Robus,没有从/index.php文件正确登录的用户将无法访问/login/buyer/index.php文件中的内容,因为您进行了检查,因此会话设置为Yeah,但是如果我尝试访问/登录/buyer/不通过url登录,它只是挂起一段时间,但实际上从未做任何事情。我不希望服务器挂起。。。我想让它做点什么有什么额外的安全措施吗?如果$\u会话['isBuyer']
部分重定向他们说/login/buyer/profile/
成功登录后,使用header()
发送到/profile/子目录??如果$\u会话['isBuyer']
部分重定向到他们说<代码>/login/buyer/profile/成功登录后,使用标题()将其发送到/profile/子目录??是吗