Php 使用$\u会话设置用户ID和密码
设置用户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
****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劫持会话”上的前十个结果之一。要真正节省会话处理,有很多方法和很多事情需要做。还有一些方法可以检索值。谢谢你的否决票@阿尼穆森