我登录用户,在我的PHP脚本中,我创建一个会话变量并为其分配用户名(因为它是唯一的)。
<?php
session_start();
//$username= getting username from database and all after loggin
$_SESSION['user_of_mywebsie']=$username;
// using $username now
现在这是正确而安全的方式吗?如果没有,可以做些什么? 现在使用用户名创建会话..
$sql_query=mysql_query("SELECT * FROM people WHERE username='$_SESSION['user_of_mywebsite']'");
while($row=mysql_fetch_assoc($sql_query))
{
$name=$row['name'];
$profile_pic=$row['pro_pic_location'];
}
//now i will use $name and $profile_pic furthur
答案 0 :(得分:2)
不,不正确。您的代码容易受到SQL injection的攻击。如果我的用户名是Robert'); DROP TABLE Students;--
?
您应该至少逃避数据,甚至更好地使用预准备语句和绑定参数。
How can I prevent SQL injection in PHP?
此外,您使用的是不推荐使用的数据库API。 Either use mysqli_*
or PDO
答案 1 :(得分:1)
这是完全正确的! $ _SESSION var将仅包含您网站的特定访问者的信息,无论您是否已写入$ _SESSION(但是,公平地说,有一些可能会阅读“外国”会话,例如使用共享托管或多应用程序设置等)。
我正是这样做的(与你的几乎相同)
$_SESSION['user_name'] = $result_row->user_name;
在我的PHP登录脚本中(这是github上最明星,下载和分叉的脚本,并且已被一些非常挑剔的人检查过)。查看更多脚本here on github。
答案 2 :(得分:1)
这会将用户名存储在会话中,但不是特别安全。
如果您在会话中持有的唯一内容是用户名,这可能没问题,但如果您在用户会话中存储了个人信息,则可能需要考虑添加一些安全性。
我找到了这个方便快捷的会话安全教程http://phpsec.org/projects/guide/4.html
此外,如果您不熟悉php编程,最好使用其中一个实现用户管理的框架,因为之前已经多次完成,测试和完善。无需在这里重新发明轮子。
如果您确实使用了框架,可以查看有关框架和用户管理的问题,特别是这个答案:https://stackoverflow.com/questions/10153619/looking-for-a-well-written-user-management-framework#10624058
答案 3 :(得分:0)
它会起作用,但你必须注意两件事:
在这些情况下,可能会发现仍然在会话中的用户可以发现自己登录...但是作为另一个用户!
尝试在会话中添加唯一的用户ID。