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