Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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_Session_Login - Fatal编程技术网

Php 这足以保护我的会员专区吗?

Php 这足以保护我的会员专区吗?,php,security,session,login,Php,Security,Session,Login,我创建了一个登录表单,在成功登录后将我重定向到另一个(成员区域页面) 现在,如您所知,成员区域的链接是可见的,因此,如果有人在浏览器中键入此链接,它将很容易访问。我所做的是在成功登录到会话后分配用户名,然后我将下面的php小代码放在我的主HTML <body> <?php session_start(); if(isset($_SESSION['username'])) { echo 'welcome:

我创建了一个登录表单,在成功登录后将我重定向到另一个(成员区域页面)

现在,如您所知,成员区域的链接是可见的,因此,如果有人在浏览器中键入此链接,它将很容易访问。我所做的是在成功登录到会话后分配用户名,然后我将下面的
php
小代码放在我的主
HTML

<body>
    <?php 
        session_start();

        if(isset($_SESSION['username']))
        {
        echo 'welcome: '. $_SESSION['username'];
        }
        else{
           header( 'Location: index.html');
        }
    ?>
</body>

基本上,它会检查会话中是否有
用户名
,如果是,我会让用户进入,否则我会将他重定向到索引页面


我的代码足够安全吗?黑客可以分配会话值并在没有任何授权的情况下登录吗?我知道这很简单,但我是php新手,所以我想知道我是否走对了道路。

只有在服务器上运行的脚本才能访问会话存储。因此,问题在于脚本的安全性和健壮性……

只有在服务器上运行的脚本才能访问会话存储。所以,这都是一个关于脚本安全性和健壮性的问题

黑客可以分配会话值吗

不是直接的。会话数据保存在服务器端,因此只有您的代码和服务器上运行的其他代码可以访问设置会话变量。设置会话的cookie不包含键/值,它们只包含服务器从磁盘加载会话数据的ID。当然,如果您的任何代码或服务器上的其他代码中存在安全漏洞,那么是的,黑客可以为所欲为

我所做的是在成功登录到会话后分配用户名,然后将下面的php小代码放在我的主HTML中

客户端不必遵循重定向。现在还不清楚你真正的剧本是什么样子的。请记住,如果您不希望客户端看到某些内容,请不要从服务器发送

此外,您不应该在有任何输出后设置标题。标题总是在内容之前发送。如果这对你有效,那是因为你很幸运有缓冲区。不要将身份验证逻辑与HTML表示混为一谈

黑客可以分配会话值吗

不是直接的。会话数据保存在服务器端,因此只有您的代码和服务器上运行的其他代码可以访问设置会话变量。设置会话的cookie不包含键/值,它们只包含服务器从磁盘加载会话数据的ID。当然,如果您的任何代码或服务器上的其他代码中存在安全漏洞,那么是的,黑客可以为所欲为

我所做的是在成功登录到会话后分配用户名,然后将下面的php小代码放在我的主HTML中

客户端不必遵循重定向。现在还不清楚你真正的剧本是什么样子的。请记住,如果您不希望客户端看到某些内容,请不要从服务器发送


此外,您不应该在有任何输出后设置标题。标题总是在内容之前发送。如果这对你有效,那是因为你很幸运有缓冲区。不要将身份验证逻辑与HTML演示混合使用。

您可能希望在header()调用后停止执行,以不呈现整个页面。如果这是真的,每个人都将是安全专家。使用SSL也将有助于提高安全性。您可能希望在header()之后停止执行调用以不呈现整个页面。如果这是真的,那么每个人都将是一个安全专家,使用SSL也将有助于提高安全性。+1这是一个答案。更多的单词表示相同的事情。@Majenko“更多的单词表示相同的事情”。还有更好的单词&更清楚的解释。@Majenko我不同意你的观点。我在解释会话是如何工作的。但是,我也对你的答案投了赞成票,因为它至少有点帮助。@chility将你的模板和逻辑分开一点。在输出任何HTML之前,请先执行所有PHP逻辑。您可以使用
exit()
die()
提前结束脚本,但是如果您正确地构造了内容,那么只需不调用模板代码即可。+1这是一个答案。更多的单词表示相同的内容。@Majenko“更多的单词表示相同的内容。”还有更好的措辞和更清晰的解释。@Majenko我不同意你的观点。我在解释会话是如何工作的。但是,我也对你的答案投了赞成票,因为它至少有点帮助。@chility将你的模板和逻辑分开一点。在输出任何HTML之前,请先执行所有PHP逻辑。你可以用
exit()
die()
提前结束你的脚本,但是如果你结构正确的话,那就是不调用你的模板代码;它直接解决了所提出的问题。它很短,可能会像上面Brad的回答那样包含更多信息,但它仍然是一个答案。(恰巧是正确的,boot)我同意这是一个答案;它直接解决了所提出的问题。它很短,可能会像上面Brad的回答那样包含更多信息,但它仍然是一个答案。(恰好是正确的,引导)。