Php会话安全加固

时间:2013-11-14 14:22:09

标签: php session

我想进一步加强访问页面的安全性。我目前在每页的最顶层是这个。有些文章认为这没有帮助$ _SESSION ['HTTP_USER_AGENT']是真的吗?我还通过传递get值来调用一些页面来保护那些使用mysql_real_escape_string旁边的输入的最佳方法吗?

session_start(); 
if(!( isset($_SESSION['eID']) && !empty($_SESSION['eID']) && isset($_SESSION['uID']) && !empty($_SESSION['uID']) && isset($_SESSION['HTTP_USER_AGENT']) && !empty($_SESSION['HTTP_USER_AGENT']) ))
{

}
else
{
  //all other codes goes here.

}

1 个答案:

答案 0 :(得分:1)

检查HTTP_USER_AGENT是否存在无法帮助您保护会话。愿意妥协您网站的人会立即伪造一个。

AFAIK,保护$_GET变量的最佳方法是:

  • 确保它存在。
  • 检查其类型是否正确(intfloatstringarray等。)
  • 检查内容是否有效且允许(例如:页码为正,没有字符串的特殊字符)。对于字符串,您可以使用regular expressions

只有这样你才能使用mysql_real_escape_string

示例:

if(!(isset($_GET['search'] && is_string($_GET['search']) && preg_match('/[a-zA-Z0-6 \-"\']/', $_GET['search']))) {
  die("Search was not set or is invalid");
}
do_some_query(mysql_real_escape_string($_GET['search']));

此外,您不应将此代码放在所有页面的顶部,而是将其放在另一个文件的函数中并调用它。

示例:

sessions.php中的

(不要将此文件放在可以直接调用的位置):

function check_session() {
  session_start();
  if (isset($_SESSION['id']) && !empty($_SESSION['id'])) //Add more conditions here
    return true;
  return false;
}

在其他文件中:

require_once(dirname(__FILE__)."/sessions.php");
if (!check_session()) {
    die("Forbidden"); //Or redirect to a login page
}