【CyberSecurityLearning48】PHPCookie和セッション

目次

セッション制御

Cookieステートメントの設定:setcookie();

setcookieの属性(特性):

 

サーバーはどのようにCookie情報を受信しますか

セッションメカニズム

session_start

$ _SESSIONは、セッションデータの読み取りと書き込みを完了します

ソースコード

Cookieを使用してユーザーのログインを確認する

index.php

login.php

logout.php

クッキーリスク実験(クッキーが盗まれる)

1.php(オープンセッションメカニズム)

2.php()

セッションメカニズムを使用して、ユーザーログイン認証を実現します

index.php

login.php

logout.php

セッションセキュリティ実験


 

セッション制御

Webを閲覧するときは、HTTPプロトコルが使用されます。
クライアントはリクエストを送信し、
サーバーはレスポンスを提供ます

クッキーは「身分証明書」です

クライアントに保存されているテキスト、file | string(ほとんどの場合、string)

サーバーはクライアントに送信します(Cookieはクライアントに保存されます)

クライアントブラウザがリクエストを送信するたびに、Cookie情報が自動的に送信されます

Cookie情報もキーと値のペアの形式です

Cookie情報はサーバーからクライアントに書き込まれます

Cookieステートメントの設定:setcookie();

<?php
setcookie("name","GGG");  //setcookie就是PHP中设置cookie的一个语句,服务器端向客户端写入
?>

setcookieが返すのはブール値です!

setcookieの属性(特性):

nameクッキーの名前

値Cookie値

有効期限の有効期限(終了;有効期限)

パスCookieの有効なパス

ドメインCookieのドメイン名

安全なhttps(httpsでない場合、Cookieは使用されません)

httponlyは、JSではなくhttpプロトコルを介してのみアクセスされます

ブラウザのCookie情報はどこで読むことができますか?F12--ストレージ

サーバーからクライアントにCookie(IDカード)を書き込むプロセス:
ブラウザは、ページにアクセスするときにCookie情報を自動的に伝送します

1.phpコード:

<?php
setcookie("name","AJEST",null,null,null,null,null);
// setcookie有七个参数
//过期时间写null就是浏览器关闭的时候到期
//路径写null就是默认
//null就是默认,不写就用默认选项
/*
name        Cookie的名称
value        Cookie的值
expire       过期时间(终止; 到期)
path          Cookie的有效路径
domain     Cookie的域名
secure      https(如果不是https,cookie就用不了)
httponly    仅仅通过http 协议访问,不能通过JS访问
*/

?>

 

サーバーはどのようにCookie情報を受信しますか

$ _COOKIE

2. PHPコード:

<?php
var_dump($_COOKIE);
?>

このプロセスにより、IDカードの発行とIDカードのアップロードのプロセスが完了します
。発行はsetcookie()を介し
て行われます。IDカード情報をどのように提供しますか?(クライアントブラウザがリクエストを送信するたびに、Cookie情報が自動的に送信されます)

盗みと欺瞞
盗む、つまりIDカードを紛失し(IDはクライアント側に配置されます)、
詐欺とは攻撃者がサーバーを欺くことです。

実際、ブラウザ側ではIDカードが安全ではないため、サーバー側にIDカードを配置することを検討できます。サーバー側
にIDカードを配置する場合、このメカニズムはセッションメカニズムと呼ばれます。

セッションメカニズム

セッションはIDカードをサーバー側に配置しますが、セッションメカニズムはCookieの実装に依存する必要があります。これは、Cookieがブラウザー側に保存されるテキストであり、セッションがユーザー情報がサーバー側に保存されることを示しますが、セッションはこれを実現するために、セッションにはセッションIDと呼ばれる属性があり、これもブラウザに送信されます。
セッションIDにも盗みや欺瞞のリスクがありますが、サーバー側のIDカードはブラウザ側よりも安全です。

session_start

session_startが必要なセッションの実現

<?php
session_start();//开启session机制
?>

次に、ブラウザlocalhost / 1.phpを開くと、2つのブラウザのセッションIDが異なることがわかります。つまり、このセッションIDを使用して、異なるユーザーを区別できます。
セッションはサーバー側に配置されるため、サーバー側にありますか?どこにありますか?どのキャッシュの下で

$ _SESSIONは、セッションデータの読み取りと書き込みを完了します

 


ソースコード

Cookieを使用してユーザーのログインを確認する

index.php

<meta charset="utf-8">
<h1>刹那芳华论坛</h1>

<?php
if(isset($_COOKIE['name'])){
	echo "欢迎您,{$_COOKIE['name']} <a href='./logout.php'>注销</a>";
}else{
	echo "<a href='./login.php'>请登录</a>";
}
?>

login.php

<meta charset="utf-8">
<?php
if(isset($_POST['userSubmit'])){
	if(isset($_POST['userName']) && $_POST['userName']=="AJEST"
	&& isset($_POST['userPass']) && $_POST['userPass']=="123456"
	){
		if(setcookie("name","AJEST")){
			echo "登录成功,<a href='./index.php'>返回首页</a>";
		}else{
			echo "设置cookie错误";
		}
		
	}else{
		echo "用户名或密码错误<a href='./login.php'>请重新登录</a>";
	}
}else{
$htm=<<<HTML
<form
	action=""  
	method="post"
>
用户名:<input type="text" name="userName"><br/>
密码:<input type="password" name="userPass"><br/>
<input type="submit" name="userSubmit" value="登录"><br/>
</form>
HTML;
	echo $htm;
}

?>

logout.php

<meta charset="utf-8">
<?php
setcookie("name",$_COOKIE['name'],time()-3600);   //time()是当前时间
echo "已注销,<a href='./index.php'>返回首页</a>";
?>

ホームページ(index.php)を入力してください

ログイン(login.php)

ログアウト(logout.php)


クッキーリスク実験(クッキーが盗まれる)

クッキーを盗んで直接ログインする

ブラウザにログインします

別のブラウザのローカルホストページを開いて、ログインしていないことを確認しますが、Cookie情報が盗まれたことがわかっているためです。

コンソールパネルを開き、cookieなどの情報を書き込みます

document.cookie =( "name = AJEST")

もう一度ページを更新してください。直接ログインできます。

これで、最初のブラウザページからログアウトし、Cookie情報がクリアされます

ただし、別のブラウザには影響しません


1.php(オープンセッションメカニズム)

<?php

session_start();//开启session 机制

$_SESSION['name']="GGG";

$_SESSION['age']=24;

?>

サーバー側でファイルを生成します:

対照的に、セッションは比較的安全です

2.php()


    <?php
    session_start();
    var_dump($_SESSION);
    ?>
我们只要在页面中开启了session_start
2.php就会根据我们客户端传过来的session id去找我们对应的缓存
如果缓存有值,$_SESSION就会获取存储在服务器端的session的这些变量

サーバー側でセッションファイルを開くと、設定した情報が表示されます


セッションメカニズムを使用して、ユーザーログイン認証を実現します

index.php

<?php
session_start();//session_start()要写在最前面,前面不能有任何输出
?>
<meta charset="utf-8">
<h1>刹那芳华论坛</h1>
<?php
if(isset($_SESSION['userName']) && $_SESSION['userName'] =="GGG")
{
	echo "欢迎您,{$_SESSION['userName']} <a href='./logout.php'>注销</a>";
}
else
{
	echo "<a href='./login.php'>请登录</a>";
}
?>

login.php

<?php
session_start();
echo "<meta charset='utf-8'>";
?>
<?php
if(isset($_POST['userSubmit'])){
	if(
		isset($_POST['userName']) &&
		isset($_POST['userPass']) &&
		$_POST['userName'] == "GGG" &&
		$_POST['userPass'] == "123456"
	){
		$_SESSION['userName'] = $_POST['userName'];
		echo "登录成功,<a href='./index.php'>返回首页</a>";
	}else{
		echo "用户或密码错误,<a href='./login.php'>请重新登录</a>";
	}
		
}else{
	$html=<<<HTML
<form
	action=""
	method="post"
>
用户名:<input type="text" name="userName"><br />
密码:<input type="password" name="userPass"><br />
<input type="submit" name="userSubmit" value="登录">
</form>
HTML;
	echo $html;
}
?>

logout.php

<?php
session_start();
session_destroy();//session的注销函数
echo "<meta charset='utf-8'>已注销,<a href='./index.php'>返回首页</a>";
?>

サーバー側では、セッション値に対応するファイルが生成され、ファイルは空になります

ログイン成功

サーバー側のセッションファイルをもう一度見て、ログイン認証情報を保存しましょう

ホームページに戻ります

ログアウト

同様に、サーバー側では、セッションファイルが空になり、削除されます


セッションセキュリティ実験

別のブラウザで開き、セッション値を使用してテストにログインします

サーバー側の対応するセッション値ファイルに情報を保存します

別のブラウザを開いて、新しいsess値を生成します

以前のsess値を置き換えます

更新:入るだけ

最初のブラウザでログアウトしたとき

別のブラウザで前のセッション値を使用すると無効になります

サーバー側に対応するセッションファイルの内容が空になっているため、sessiom値全体が無効です

したがって、日常生活の中でこのリンクにも注意を払う必要があります。自由にログアウトすることをお勧めします。

 

おすすめ

転載: blog.csdn.net/Waffle666/article/details/115033272