mar*_*kus 30 php session scope
我最近经常开始做的一件事是在任务开始时检索一些数据并将其存储在$ _SESSION ['myDataForTheTask']中.
现在这样做似乎很方便,但我对使用这种方法的性能,安全风险或类似情况一无所知.这是经常由具有更多专业知识的程序员完成的事情还是更多的业余事情?
例如:
if (!isset($_SESSION['dataentry']))
{
$query_taskinfo = "SELECT participationcode, modulearray, wavenum FROM mng_wave WHERE wave_id=" . mysql_real_escape_string($_GET['wave_id']);
$result_taskinfo = $db->query($query_taskinfo);
$row_taskinfo = $result_taskinfo->fetch_row();
$dataentry = array("pcode" => $row_taskinfo[0], "modules" => $row_taskinfo[1], "data_id" => 0, "wavenum" => $row_taskinfo[2], "prequest" => FALSE, "highlight" => array());
$_SESSION['dataentry'] = $dataentry;
}
Run Code Online (Sandbox Code Playgroud)
小智 19
井会话变量实际上是访问者在网站上的整个时间内可用这些变量的唯一方式(并且可能是最有效的),用户没有真正的方法来编辑它们(除了你的漏洞利用之外)代码,或在PHP解释器中)所以它们是相当安全的.
这是存储可由用户更改的设置的好方法,因为您可以在会话开始时从数据库中读取一次设置,并且它可用于整个会话,如果设置,您只需要进行进一步的数据库调用当然,正如您在代码中显示的那样,找出设置是否已存在或是否需要从数据库中提取它们是微不足道的.
我无法想到安全存储临时变量的任何其他方式(因为cookie很容易被修改,在大多数情况下这是不可取的)所以$ _SESSION将是要走的路
我一直使用会话变量来为用户存储信息。我没有看到任何性能问题。会话数据是根据 cookie(或PHPSESSID,如果您关闭了 cookie)拉取的。我不认为它比任何其他基于 cookie 的身份验证更具安全风险,而且可能比将实际数据存储在用户 cookie 中更安全。
只是为了让您知道,您的 SQL 语句确实存在安全问题:
SELECT participationcode, modulearray, wavenum FROM mng_wave WHERE wave_id=".$_GET['wave_id'];
Run Code Online (Sandbox Code Playgroud)
您永远不应该,我重复永远不,获取用户提供的数据并使用它来运行 SQL 语句,而无需先对其进行清理。我会把它用引号括起来并添加函数mysql_real_escape_string()。这将保护您免受大多数攻击。所以你的行看起来像:
$query_taskinfo = "SELECT participationcode, modulearray, wavenum FROM mng_wave WHERE wave_id='".mysql_real_escape_string($_GET['wave_id'])."'";
Run Code Online (Sandbox Code Playgroud)
小智 5
$ _SESSION机制正在使用cookie.
对于Firefox(也许是新IE,我没有检查自己),这意味着会话在打开的选项卡之间共享.这不是你默认的预期.这意味着会话不再是"特定于单个窗口/用户的东西".
例如,如果您打开了两个选项卡来访问您的站点,而不是使用第一个选项卡以root身份登录,则您将获得另一个选项卡的root权限.
这真的很不方便,特别是如果你编写电子邮件客户端或其他东西(如电子商店).在这种情况下,您必须手动管理会话或在URL中引入不断重新生成的密钥或执行其他操作.
| 归档时间: |
|
| 查看次数: |
11288 次 |
| 最近记录: |