2013-11-14 92 views
0

我想进一步加强我的访问页面的安全性。我现在每一页的最顶部是这个。一些文章表明这​​没有帮助$ _SESSION ['HTTP_USER_AGENT']是真的吗?我还通过传递get值来调用一些页面,以最好的方式来保证那些使用mysql_real_escape_string的输入?Php会话安全强化

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

检查HTTP_USER_AGENT的存在不会帮助您保护您的会话。有人愿意妥协你的网站将立即建立一个。

据我所知,以确保$_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 
} 
+0

是一些其他的文章也说,那HTTP_USER_AGENT不会很有帮助。那么如何保证会话安全以确保只有有效的用户才能访问某些扫描器等?对于_GET,你通常如何确保它存在,你的意思是检查不是空的?如何检查类型,如果它的varchar?对于字符串什么是允许或有效的内容存储到数据库?我应该把哪一部分放在一个函数中去表达整个if和else的意思? – user2711681

+0

你想要什么?只允许有效的和登录的用户,或允许任何看起来不像机器人/扫描仪的东西? – ZeWaren

+0

Mysql''varchars'是php中的字符串。 “有效内容”的概念取决于您的应用程序。例如,当某人提交用户名或电子邮件地址时,您应该检查非标准字符。 – ZeWaren