PHP$\会话简单安全化问题

PHP$\会话简单安全化问题,php,Php,我正在构建一个包含3个信息的会话数组:mail、password和id。我使用的邮件和密码。注意,在使用数据之前,我对邮件使用mysql\u real\u escape\u string,对密码使用sha1。但是对于id,我从数据库中获取值。问题是:为了安全起见,我应该做'id'=>htmlentities($data['ENS\u id'])而不是只做'id'=>$data['ENS\u id']?对不起,如果我的问题对你没有意义,但我对证券化有点迷茫。提前感谢您的回复。干杯马克 $resul

我正在构建一个包含3个信息的会话数组:
mail
password
id
。我使用的邮件和密码。注意,在使用数据之前,我对邮件使用
mysql\u real\u escape\u string
,对密码使用sha1。但是对于id,我从数据库中获取值。问题是:为了安全起见,我应该做
'id'=>htmlentities($data['ENS\u id'])
而不是只做
'id'=>$data['ENS\u id']
?对不起,如果我的问题对你没有意义,但我对证券化有点迷茫。提前感谢您的回复。干杯马克

$result = mysql_query("SELECT * FROM ENS_MEMBRES WHERE ENS_MAIL = '$mail' AND ENS_PASS = '$password'");

if(mysql_num_rows($result)==1){

    $data=mysql_fetch_assoc($result);   
    $_SESSION['Auth']=array(
        'mail'=>$mail,
        'password'=>$password,
        'id'=>$data['ENS_ID'],
    );

不,应该没有必要<代码>id应为数字类型。即使它是另一种类型,我个人认为最好不要逃避你存储在<代码> $Sub会话中的值,而当你用它做某事时,它就逃脱了。是否在HTML代码->使用
htmlspecialchars
中插入值。您是否计划在后续查询中使用它?使用
mysql\u real\u escape\u string
等等。在任何情况下,
$\u会话
都应该真正存储原始值IMHO(即未转义)。毕竟,根据您对值所做的操作,您需要不同类型的转义

只考虑如果你需要原始的(un逃脱)<代码> ID >代码>某个时候,或者以不同的方式逃跑。取消显示您在

$\u会话中输入的值将非常麻烦

--


请注意,在任何情况下,至少从长远来看,最好使用PDO或类似工具与数据库进行交互。使用准备好的语句和有界参数,您甚至不必自己转义参数。

不,这应该是不必要的<代码>id
应为数字类型。即使它是另一种类型,我个人认为最好不要逃避你存储在<代码> $Sub会话中的值,而当你用它做某事时,它就逃脱了。是否在HTML代码->使用
htmlspecialchars
中插入值。您是否计划在后续查询中使用它?使用
mysql\u real\u escape\u string
等等。在任何情况下,
$\u会话
都应该真正存储原始值IMHO(即未转义)。毕竟,根据您对值所做的操作,您需要不同类型的转义

只考虑如果你需要原始的(un逃脱)<代码> ID >代码>某个时候,或者以不同的方式逃跑。取消显示您在

$\u会话中输入的值将非常麻烦

--


请注意,在任何情况下,至少从长远来看,最好使用PDO或类似工具与数据库进行交互。使用准备好的语句和有界参数,您甚至不必自己转义参数。

您可以将ID作为存储在会话中,但无论何时在另一个上下文中使用它,都必须适当地转义它。这意味着:

  • 在数据库查询中使用时,请使用
  • 在HTML页面中输出时,使用
  • 作为url的一部分使用时,请使用()
  • 执行外部命令时,分别使用或

您可以将ID作为存储在会话中,但无论何时在另一个上下文中使用它,都必须对其进行适当的转义。这意味着:

  • 在数据库查询中使用时,请使用
  • 在HTML页面中输出时,使用
  • 作为url的一部分使用时,请使用()
  • 执行外部命令时,分别使用或

    • 你做错了!在将邮件字符串放入SQL查询之前,应该使用mysql\u real\u escape\u字符串,但您可能希望将其以原始形式保存到会话数组中,而不进行转义


      id(或从数据库中获取的任何内容)也是如此。只有在需要使用数据时才转义数据。转义在不同的上下文中是不同的,因此在SQL上下文中转义为HTMl(使用htmlentities)可能不安全,反之亦然。

      您做错了!在将邮件字符串放入SQL查询之前,应该使用mysql\u real\u escape\u字符串,但您可能希望将其以原始形式保存到会话数组中,而不进行转义


      id(或从数据库中获取的任何内容)也是如此。只有在需要使用数据时才转义数据。不同上下文之间的转义不同,因此HTMl转义(使用htmlentities)在SQL上下文中可能不安全,反之亦然。

      为什么要在会话中存储密码?您在会话期间需要密码做什么?因为我多次检查用户是否已登录。我有一个isLogged()函数,首先检查会话信息是否已设置,以及信息是否正确(使用db检查),以处理数据库中存储的信息已被更改的情况?为什么要在会话中存储密码?您在会话期间需要密码做什么?因为我多次检查用户是否已登录。我有一个isLogged()函数,首先检查会话信息是否已设置,以及信息是否正确(使用db检查),以处理存储在数据库中的信息已被更改的情况?在这种情况下,是否不需要对来自数据库的数据进行安全保护?如果我从数据库中为会话目的检索的值是int以外的另一种类型,那么在这种情况下是否应该使用htmlentities()?我已经更新了这方面的答案。答案是:我认为最好将原始值保存在$\u会话中,并在使用它执行某些可能危险的操作时转义它,例如在HTML代码中插入值或在查询中使用它。根据该操作的类型,您将需要不同类型的转义。是否不需要对来自数据库的数据进行安全化