知識點(diǎn)
1.后臺驗(yàn)證-登錄用戶邏輯安全-怎么去判定用戶登陸成功
2.后臺驗(yàn)證-COOKIE&SESSION
3.后臺驗(yàn)證-驗(yàn)證碼·&萬能密碼等
思路:
1.發(fā)送登錄請求 賬號 密碼
2.接收賬號密碼
3.判斷賬號密碼的準(zhǔn)確性
正確 成功登陸->跳轉(zhuǎn)成功頁面
錯誤 失敗登錄->重新登陸
后臺管理系統(tǒng)有多個文件頁面,為了方便,一般會選用cookie或session進(jìn)行驗(yàn)證
cookie:身份驗(yàn)證 存儲到客戶端瀏覽器內(nèi)
cookie安全:cookie修改 偽造 盜取
session:身份驗(yàn)證 存儲到服務(wù)端服務(wù)器內(nèi)
session安全:會話劫持(session劫持)
?cookie驗(yàn)證
php-解決亂碼:header("Content-type: text/html; charset=utf-8");
賬號密碼存儲在syguestbook中的sy_adminuser中
①驗(yàn)證及跳轉(zhuǎn)
login.php
<form action="" method="POST">
帳號:<input type="text" name="user">
密碼:<input type="password" name="pass">
<input type="submit" value="提交">
</form>
<?php
header("Content-Type:text/html;charset=utf-8");
include('../config/conn.php');
$username=$_POST['user'];
$password=md5($_POST['pass']);//數(shù)據(jù)庫里密碼經(jīng)過md5加密后存儲,所以這里要用md5加密
//echo $password;
$sql="select * from sy_adminuser where username='$username' and password='$password'";
echo $sql;
$result=mysql_query($sql,$conn);
if (mysql_num_rows($result)){ //mysql_num_rows判斷行數(shù)
setcookie('user',$username,0,'/');
header('Location: index.php');
}
index.php?
<?php
//先驗(yàn)證登錄。才進(jìn)行代碼的操作
header("Content-Type:text/html;charset=utf-8");
$user=$_COOKIE['user'];
if ($user==""){
header("Location: login.php");
exit;
}else{
echo "歡迎登陸管理員首頁!";
}
?
此時右鍵頁面檢查會發(fā)現(xiàn)已有cookie
注意:header不能放在else里,否則會無線訪問導(dǎo)致錯誤?
?②在config目錄下創(chuàng)建login_check.php,內(nèi)容為index.php,然后在index.php里進(jìn)行包含
③案例:xhcms(熊海)
1.下載網(wǎng)站:訪問localhost/xhcms/insatll進(jìn)行相關(guān)配置
2.訪問localhost/xhcms/admin輸入任意賬號密碼登錄,地址變?yōu)閘ocalhost/xhcms/admin/?r=login
進(jìn)行更改,localhost/xhcms/admin/?r=index,顯然cookie沒有通過訪問不了,這時用burpsuite進(jìn)行抓包,更改Cookie為“user=1”
?
?3.forward之后直接進(jìn)入控制臺
?4.源代碼
?黑盒測試的話就在cookie上嘗試進(jìn)行修該
白盒測試(有代碼)直接設(shè)置
cookie盜取:cookie儲存在自己的瀏覽器里,如果這個時候別人利用xss漏洞獲取用戶cookie就可以直接登錄了
?Session驗(yàn)證
session驗(yàn)證相當(dāng)于打電話,登陸之后相當(dāng)于接了個電話,一旦關(guān)閉瀏覽器會話就終止了(每次登陸重新生成PHPSESSION)
會話劫持:人家正在瀏覽器瀏覽,沒有關(guān)閉,這時候獲取的session是有效的,就可以偽造登錄,如果他關(guān)了,那么獲取到的session就沒有任何價值
session登陸一次就產(chǎn)生一次
xxxSESSIONID-->是session驗(yàn)證,和cookie沒關(guān)系,跟它說拜拜了
1.session驗(yàn)證
<form action="" method="POST">
帳號:<input type="text" name="user">
密碼:<input type="password" name="pass">
<input type="submit" value="提交">
</form>
<?php
header("Content-Type:text/html;charset=utf-8");
include('../config/conn.php');
$username=$_POST['user'];
$password=md5($_POST['pass']);
$captcha=$_POST['captcha'];
//echo $password;
$sql="select * from sy_adminuser where username='$username' and password='$password'";
echo $sql;
$result=mysql_query($sql,$conn);
while($row=mysql_fetch_array($result)){ //成功登錄后
session_start();
$_SESSION['username'] = $row['username'];//將查詢結(jié)果的數(shù)據(jù)進(jìn)行賦值
//echo $_SESSION['username'];
header('Location: index.php');
}
2.index.php
<?php
header("Content-Type:text/html;charset=utf-8");
session_start();
$username=$_SESSION['username'];
if($username=='admin'){
echo '歡迎登陸管理員首頁!';
}else{
echo "請登錄后訪問!";
}
?驗(yàn)證碼&萬能密碼
1.萬能密碼(sql注入)
萬能密碼大全-CSDN博客
?假或真=真? ? #為數(shù)據(jù)庫里的一個注釋符(相當(dāng)于忽略)
SELECT * FROM `sy_adminuser` where username='' or 1=1# and password='dsadsaa';
?
?
?此時會直接進(jìn)入首頁
2.驗(yàn)證碼(防止爆破)
1.code.php
<?php
session_start();//必須位于腳本的最頂端
$image=imagecreatetruecolor(100, 30);//imagecreatetruecolor函數(shù)建一個真彩色圖像
//生成彩色像素
$bgcolor=imagecolorallocate($image, 255, 255, 255);//白色背景 imagecolorallocate函數(shù)為一幅圖像分配顏色
$textcolor=imagecolorallocate($image,0,0,255);//藍(lán)色文本
//填充函數(shù),xy確定坐標(biāo),color顏色執(zhí)行區(qū)域填充顏色
imagefill($image, 0, 0, $bgcolor);
$captch_code="";//初始空值
//該循環(huán),循環(huán)取數(shù)
for($i=0;$i<4;$i++){
$fontsize=6;
$x=($i*25)+rand(5,10);
$y=rand(5,10);//位置隨機(jī)
// $fontcontent=$i>2?chr(rand(97,122)):chr(rand(65,90));//是小寫,否則是大寫
$data='abcdefghijkmnpqrstuvwxyz3456789';
$fontcontent=substr($data,rand(0,strlen($data)-1),1);
$fontcolor=imagecolorallocate($image,rand(0,100),rand(0,100),rand(0,100));//隨機(jī)的rgb()值可以自己定
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); //水平地畫一行字符串
$captch_code.=$fontcontent;
}
$_SESSION['authcode']=$captch_code;//將變量保存再session的authcode變量中
//該循環(huán),循環(huán)畫背景干擾的點(diǎn)
for($m=0;$m<=600;$m++){
$x2=rand(1,99);
$y2=rand(1,99);
$pointcolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($image,$x2,$y2,$pointcolor);// 水平地畫一串像素點(diǎn)
}
//該循環(huán),循環(huán)畫干擾直線
for ($i=0;$i<=10;$i++){
$x1=rand(0,99);
$y1=rand(0,99);
$x2=rand(0,99);
$y2=rand(0,99);
$linecolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
imageline($image,$x1,$y1,$x2,$y2,$linecolor);//畫一條線段
}
header('content-type:image/png');
imagepng($image);
//銷毀
imagedestroy($image);
?>
2.f.php
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 簡單的表單提交代碼 -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>簡單驗(yàn)證碼的實(shí)現(xiàn)</title>
</head>
<body>
<form method="post" action="">
帳號:<input type="text" name="user">
密碼:<input type="password" name="pass">
<p>驗(yàn)證碼圖片:<img src="code.php" onClick="this.src='code.php?nocache='+Math.random()" style="cursor:hand" alt="點(diǎn)擊換一張"/>點(diǎn)擊圖片可更換驗(yàn)證碼</p>
<p>請輸入圖片中的內(nèi)容:<input type="text" name="authcode" value=""/></p>
<p><input type="submit" width="20px" height=19px value="提交"></input></p>
</form>
</body>
</html>
<?php
include('config/conn.php');
header("Content-type: text/html; charset=utf-8");
// session 存值并匹配用戶輸入值
if (isset($_REQUEST['authcode'])) {
session_start();
if (strtolower($_REQUEST['authcode'])==$_SESSION['authcode']) {//strtolower轉(zhuǎn)化為小寫的函數(shù)
echo"輸入正確!";
$username=$_POST['user'];
$password=md5($_POST['pass']);
$sql="select * from sy_adminuser where username='$username' and password='$password'";
$result=mysql_query($sql,$conn);
if(mysql_num_rows($result)){
$row=mysql_fetch_array($result);
echo '成功!';
session_start();
$_SESSION['user']=$row['username'];//講查詢結(jié)果的數(shù)據(jù)進(jìn)行賦值
header("Location: admin/add_news.php");
}else{
echo '失敗!';
//header("Location: login.php");
}
# code...
}
else{
echo"輸入錯誤!";
}
exit();
}
?>
?
?驗(yàn)證碼正確才能進(jìn)行下一步——看賬號密碼
?問題:驗(yàn)證碼復(fù)用
用burpsuite抓包,發(fā)送到repeater模塊,保持驗(yàn)證碼正確不斷更改密碼直到成功
這個過程就相當(dāng)于爆破
防爆破攻擊:-每一次登錄驗(yàn)證碼都要變,否則有沒有驗(yàn)證碼沒有區(qū)別文章來源:http://www.zghlxwxcb.cn/news/detail-852115.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-852115.html
到了這里,關(guān)于小迪安全 第15天:php開發(fā)-個人博客項(xiàng)目&登錄驗(yàn)證&cookie&session&驗(yàn)證碼安全的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!