Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 使用$\u会话设置用户ID和密码_Php_Session Variables - Fatal编程技术网

Php 使用$\u会话设置用户ID和密码

Php 使用$\u会话设置用户ID和密码,php,session-variables,Php,Session Variables,设置用户id并传递给会话是否存在安全风险?如果是,怎么做? 会话变量将位于包含的文件中。我知道这不允许其他用户登录,但我只有一个用户可以登录 ****CONFIG.PHP**** session_start(); $_SESSION['USER'] = 'USERNAME'; $_SESSION['PASS'] = 'PASSWORD'; ****LOGIN.PHP**** include ('config.php'); IF ($_SESSION['USER'] == $_POST['US

设置用户id并传递给会话是否存在安全风险?如果是,怎么做? 会话变量将位于包含的文件中。我知道这不允许其他用户登录,但我只有一个用户可以登录

****CONFIG.PHP****
session_start();
$_SESSION['USER'] = 'USERNAME';
$_SESSION['PASS'] = 'PASSWORD';


****LOGIN.PHP****
include ('config.php');
IF ($_SESSION['USER'] == $_POST['USERNAME'] && 
$_SESSION['PASS'] == $_POST['PASSWORD']){
ALLOW ACCESS;
}

您不应在会话中保护密码。如果操作正确,则无法从外部操纵会话数据,因此设置用户名时您知道用户是合法的。

如果您使用的是最终用户无法修改的服务器端会话,则没有理由将密码存储在那里。这只是服务器上存在密码的另一个地方。一旦您验证了它是一个有效的用户并且密码正确,您只需要在会话中存储他们的用户ID。他们无法更改它,所以您可以始终相信它实际上是他们的用户ID

会话劫持的风险总是存在的,但这是另一个话题

至于你的代码,你误解了会话。您可以在验证用户输入后进行设置

****CONFIG.PHP****
$username = 'USERNAME';
$password = 'PASSWORD';


****LOGIN.PHP****
include ('config.php');
IF ($username == $_POST['USERNAME'] && $password == $_POST['PASSWORD']){
    session_start();
    $_SESSION['username'] = $username;
}
然后,您可以测试是否设置了
$\u会话['username']
。如果是,那么你知道你已经登录了

IF (isset($_SESSION['username'])){
    ALLOW ACCESS;
}

这不会带来安全风险,但绝对不允许扩张。如果明天需要允许两个用户,则必须重新构建登录

而且,如果您只允许一个用户,为什么要使用会话来存储要比较的值?你可以这么做

Config.php

static class AuthValues
{
   $username = "username";
   $password = "password"
}
include ('config.php');
$auth = AuthValues;
IF ($auth::username == $_POST['USERNAME'] && 
$auth:password == $_POST['PASSWORD']){
ALLOW ACCESS;
}
然后,在login.php中

static class AuthValues
{
   $username = "username";
   $password = "password"
}
include ('config.php');
$auth = AuthValues;
IF ($auth::username == $_POST['USERNAME'] && 
$auth:password == $_POST['PASSWORD']){
ALLOW ACCESS;
}

会话注入可能会窃取另一个用户会话并获取其密码。即使您使用的是salted has而不是cleartext,这也不是真正值得推荐的

一个更好的方法是实现一个好的算法,在用户做一些需要特别许可才能做的事情时,重新检查用户是否有效

处理时间和类似的事情应该比良好的安全性更重要


Harry

就像脚本名
CONFIG.PHP
指出的那样,用户名和密码都是配置数据。会话用于存储属于特殊用户会话的数据。存储配置数据的一个好做法是使用常量,因为一旦定义了常量,程序就无法更改它们

CONFIG.PHP

define('USER', 'USERNAME');
define('PASS', 'PASSWORD');
LOGIN.PHP

include 'config.php';
IF (USER == $_POST['USERNAME'] && PASS == $_POST['PASSWORD']) {
    session_start();
    $_SESSION['allow_access'] = true;
}
随便什么.PHP

session_start();
if (isset($_SESSION['allow_access'])) {
    //ALLOW ACCESS
}

^^请确保您理解会话的含义。每次会话都是特定于用户的。除了memcache等解决方案之外,两个用户不可能共享一个会话。因此,除了扩展之外,这将是一种快速、安全的会话方法login@Harry:我了解会话是特定于用户的。我的意思是,如果两个用户打算使用它,他们都将被迫使用相同的用户名和密码,因为他正在对分配给会话数组的值进行硬编码。我分配会话作为额外的预防措施,因为这将在服务器上存储信息。如果正确?即使您将值分配给类成员属性,它们仍将存储在服务器上。如果没有密码,我如何验证用户是否合法,上面的示例不使用数据库。实际上这不是真的@TimWolla请阅读中有关会话劫持的内容php@ChristopherJueden-pytel然后密码应该设置为常量或类似的值。会话不是正确的位置。@Harry我能想象的唯一可能的攻击是CSRF,但这与PHP或其他任何东西无关。你能给我一个这样的信息链接吗?我想使用上面的脚本作为登录和验证表单,不涉及mysql。我想我们最好不要在会话中保存密码,只保存身份验证状态。你不能从被劫持的会话中检索数据,只能使用他们的会话。在安全性不好的情况下,可以更改他们的密码,但实际上您无法查看密码,因为它从未在任何地方输出给他们。请阅读此示例或google“php劫持会话”上的前十个结果之一。要真正节省会话处理,有很多方法和很多事情需要做。还有一些方法可以检索值。谢谢你的否决票@阿尼穆森