是Ajax令牌"更多"如果会话仅在管理员登录时启动,则安全吗?

时间:2016-05-16 01:10:24

标签: php ajax security

经过几个小时的研究以确保Ajax请求安全,我来到了PHP Session。我生成一个令牌并将此值传递给会话,如下所示:

session_start(); 
$token = "test".rand(1,10);
$_SESSION['token'] = $token;

这显然是一个测试场景。我的令牌已加密并以不同方式生成。我使用此会话从表单到同一服务器中的外部文件进行XMLHttpRequest echoes我想让管理员看到的一些文本。包含文本的文件具有此网址http://127.0.0.1:8888/demo-site/content,如下所示:

session_start();

if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {

    if (@isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] == "http://127.0.0.1:8888/demo-site/ajax") {

        if ($_GET["token"] == $_SESSION["token"]) {

            echo "Successful";

        }

    }

}

从上面的代码中可以看出,它首先检查它是否是一个AJAX调用,然后是请求来自哪里,最后它比较了令牌。我以link参数的形式将令牌传递给外部php文件,因此来自http://127.0.0.1:8888/demo-site/content?token=xxx$_GET["token"]

我曾经检查用户是否已登录,如果true,则检查用户是否为管理员,如果还是true,则echo内容。可能是这样,如果以session_start()及其各自形式的php代码 ONLY 向以管理员身份登录的用户显示,则会增加额外的安全层。

我的意思是,如果黑客想要访问外部文件的内容,他必须首先破解管理员的密码,然后是令牌?

我假设没有会话,如果没有人以管理员身份登录而且内容没有显示。我不想基于令牌依赖此文件的安全性,但用户也必须是管理员。

或者黑客是否可以访问该文件的内容,如果他知道什么是令牌,无论用户是否以管理员身份登录?

我指的是,黑客知道令牌,但没有session_start()。我已经考虑了很多,但我不确定这个假设是否正确。

1 个答案:

答案 0 :(得分:2)

我认为你过分复杂了。 PHP具有良好的会话安全性 - 请参阅http://php.net/manual/en/session.security.php并实施其中推荐的设置。 " session.hash_function"特别重要,并且意味着会话令牌无法被破解'或者猜到了。

一般来说,酿造自己的安全系统代替普遍使用的安全系统是一个坏主意。除非你真的知道自己在做什么,否则在PHP Sessions之上添加新的安全层可能是不明智的。

首先,使用SSL。这样可以保护您的传输数据。接下来,不要将GET用于令牌或密码,因为这会将它们暴露给代理和服务器日志。管理员登录后,会收到一个安全的PHP会话令牌作为cookie。 PHP透明地使用此cookie来使用session_start()获取会话。在会话变量中,您已定义了例如$ _SESSION [' admin'] = 1,这意味着此会话是管理员。访问管理员数据时,请检查$ _SESSION [' admin'] == 1。

客户对自己的安全负责。你不能对此做任何事情(除了使用像MFA这样的动态内容)。我的意思是:如果客户的计算机遭到入侵,任何黑客都可以密钥登录凭证,或读取cookie等,所以你做服务器端的任何东西都是可以破解的。您可以添加图层和安全层,但它很臃肿。

这可以被黑客攻击吗?是的,如果黑客可以访问客户端计算机。但是一切都可以被黑客入侵。如果客户端计算机上没有泄露,SSL会保护通信。