(web安全实践)phpstorm+phpstorm社交论坛网站搭建+安全性测试(五)

(五)session的产生、使用与管理

   一个最简单的使用session的例子,就是将相关的session数据从一个页面传递(注意:实际传递的是session id)到另一个页面,本网站中多次使用。

类似于下面的代码:

/*a.php*/
<?php
session_start();
$_SESSION['a'] = 'test';
?>
<a href="b.php">b.php</a>
/*b.php*/
<?php
session_start();
echo $_SESSION['a']; /*test*/
?>

 这样就可以实现简单的参数在页面间的传递。(注意要在文件的第一行添加session_start()

session的应用

(1)超时重新登录

session_start();
        if(isset($_SESSION['expiretime'])) {
            if($_SESSION['expiretime'] < time()) {
                unset($_SESSION['expiretime']);
                $_SESSION = array(); //清除SESSION值.
                if(isset($_COOKIE['name'])){  //判断客户端的cookie文件是否存在,存在的话将其设置为过期.
                    setcookie('name','',time()-1,'/');
                }
                session_destroy();  //清除服务器的sesion文件
                echo "<script >alert('登录超时,请重新登录!' );location='login.php';</script>";
                exit(0);
            } else {
                $_SESSION['expiretime'] = time() + 600; // 刷新时间戳
            }
        }

  避免用户忘记注销时别人进入网站对信息进行操作。

(2)避免重复登录

/*登陆成功时设置session,储存post的用户名*/
$_SESSION['username'] = $_POST["username"];
/*点击进入界面时会检测是否设置了该session*/
session_start();
if(isset($_SESSION['username']))/跳转登录时检测是否已设置该session
{
    echo "<script>alert('您已登录!');location='firstpage.php';</script>";
    exit(0);
}

(3)注销清空session

  $_SESSION = array(); //清除SESSION值.
    if(isset($_COOKIE['name'])){  //判断客户端的cookie文件是否存在,存在的话将其设置为过期.
        setcookie('name','',time()-1,'/');
    }
    session_destroy(); 

  用户点击注销时清空session和cookie

session的安全性

通常针对session的攻击:

当用户访问某一个网站是,服务器会产生一个cookie-phpsessid,因为服务器及时通过这个cookie-phpsessid来辨别用户的,所以只要攻击者获得这个cookie-phpsessid,就可以伪装成正常用户对网站进行破坏。

加强安全性:

可以通过修改请求头部信息,如果客户端通过PHPSESSID传递相关的session标识符,可以将PHPSESSID放在cookie头部中进行传递;同样地,客户端也可以将session标识符放在请求的url中进行传递。

或者可以在头部中加入不是必需的信息,例如:

GET / HTTP/1.1
Host: example.org
Cookie: PHPSESSID=12345
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Accept: text/html;q=0.9, */*;q=0.1
Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66
Accept-Language: en

如果浏览器发送了这些头部信息到服务器,那无疑接下来的请求中头部会带有这些信息,在一定程度上可以加强安全性,但是如果头部信息不同也不能完全确定该请求来自攻击者,此时就需要设置一个密码在这个时候来让用户输入进行检测。

第一次请求时,将user-agent加密后,存进session里,以后的每次请求都会比对user-agent与session里的useragent,如果不同的话就要输入密码进行验证。

具体的关于session安全可以参照:

https://www.freebuf.com/articles/web/10369.html#

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值