我正在构建一个包含3个信息的会话数组:mail
,password
和id
。我在POST中使用的邮件和密码。请注意,在使用数据之前,我使用mysql_real_escape_string
作为邮件,使用sha1作为密码。但对于id我从数据库中获取值。问题是:出于安全目的,我应该'id'=>htmlentities($data['ENS_ID'])
而不仅仅'id'=>$data['ENS_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'],
);
答案 0 :(得分:3)
您可以将ID存储在会话中,但是无论何时在其他上下文中使用它,都必须适当地转义它。这意味着:
htmlspecialchars
raw
)urlencode
escapeshellarg
或escapeshellcmd
。答案 1 :(得分:2)
不,没有必要。 id
应为数字类型。即使它是另一种类型,我个人认为最好不要逃避你在$_SESSION
中存储的价值,而是在你用它做某事时逃避它。您是否在HTML代码中插入了值 - >使用htmlspecialchars
。你打算在后续查询中使用它吗?使用mysql_real_escape_string
等。在任何情况下,$_SESSION
都应该存储原始值IMHO(即未转义)。毕竟,你需要进行不同类型的转义,具体取决于你对价值所做的事情。
考虑一下如果您在某个时候需要原始(未转义)id
或者以不同方式转义它会发生什么。放弃你在$_SESSION
中的价值是很麻烦的。
-
请注意,在任何情况下,最好使用PDO或类似工具与数据库进行交互,至少从长远来看是这样。使用预处理语句和有界参数,您甚至不必自己转义参数。
答案 2 :(得分:1)
你做错了!在将邮件字符串放入SQL查询之前应该使用mysql_real_escape_string,但是您可能希望以原始形式将其保存到会话数组中而不会转义。
同样适用于id(或从数据库中获取的任何内容)。只有在使用它时才能转义数据。转义在不同的上下文之间有所不同,因此对于HTMl(具有htmlentities)的转义在SQL上下文中可能不安全,反之亦然。