PHP 会话安全强化



我想进一步加强访问页面的安全性。我目前每页最上面的是这个。一些文章认为这没有帮助 $_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.
}

检查是否存在HTTP_USER_AGENT不会帮助您保护会话。愿意破坏您的网站的人会立即伪造一个。

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

  • 确保它存在。
  • 检查其类型是否正确(整数、浮点数、字符串、数组等)
  • 检查内容是否有效且允许(例如:页码为正数,字符串不带特殊字符)。对于字符串,可以使用正则表达式。

只有这样,您才应该使用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
}

最新更新