Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不允许直接访问_Php_Security_Brute Force - Fatal编程技术网

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;

基本上,我有两个文件,在两个不同的目录中: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;
}

//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/子目录??是吗