5

我登录一个用户,并在我的 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 
4

4 回答 4

2

不不正确。您的代码容易受到SQL 注入的攻击。如果我的用户名是这样的Robert'); DROP TABLE Students;--怎么办?

您实际上应该至少转义数据,甚至更好地使用准备好的语句和绑定参数。

如何防止 PHP 中的 SQL 注入?

此外,您正在使用已弃用的数据库 API。使用mysqli_*PDO

于 2013-06-11T20:48:27.177 回答
1

这会将用户名存储在会话中,但不是特别安全。

如果您在会话中持有的唯一内容是用户名,这可能没问题,但如果您在用户会话中存储了个人信息,您可能需要考虑增加一些安全性。

我发现这个方便的会话安全快速教程http://phpsec.org/projects/guide/4.html

此外,如果您是 php 编程新手,最好使用其中一种实现用户管理的框架,因为这已经做过很多次,经过测试和完善。无需在这里重新发明轮子。

如果您确实使用框架,您可以查看有关框架和用户管理的这个问题,尤其是这个答案:https ://stackoverflow.com/questions/10153619/looking-for-a-well-written-user-management-framework #10624058

于 2013-06-11T20:21:02.653 回答
1

这是完全正确的!$_SESSION 变量将只包含您网站的特定访问者的信息,无论您在 $_SESSION 中写入了什么(但是,公平地说,有一些可能读取“外部”会话,例如在使用共享主机或多应用程序设置等)。

我正在这样做(与您的几乎相同)

$_SESSION['user_name'] = $result_row->user_name;

在我的 PHP 登录脚本中(这是 github 上最多星、下载和分叉的一个,并且已经被一些非常挑剔的人检查过)。在 github 上查看更多脚本。

于 2013-06-11T20:07:17.397 回答
0

它会起作用,但你必须注意两件事:

  1. 您必须确保没有两个或多个同名用户;
  2. 如果删除登录用户(会话有效的用户名)并创建另一个同名用户会发生什么?

在这些情况下,仍然处于会话中的用户可能会发现自己已登录......但作为另一个用户!

尝试在会话中放置一个唯一的用户 ID。

于 2013-06-11T20:38:09.670 回答