4.php开发-个人博客项目&登录验证&cookie&session&验证码安全
目录
4.php开发-个人博客项目&登录验证&cookie&session&验证码安全
知识点
本节大纲思路
——这里以我自己的为例——
cookie验证——————>
login1.php-登录后台界面
login_check.php-检查,作为包含文件
add_news.php-后台界面
php编码
如何创建 Cookie?–setcookie()
语法
实例 1
php header跳转
演示案例-cookie验证脆弱问题
session验证——————>
session/login.php-管理员登录界面
session/index.php-后台界面
验证码——————>
万能密码
验证码
知识点
1-后台验证-登录用户逻辑安全
2-后台验证-cookie&session
3-后台验证-验证码&万能密码等
本节大纲思路
——这里以我自己的为例——
cookie验证——————>
login1.php-登录后台界面
——根目录下
————这里注意输入密码的时候一般就进行了 MD5加密 ,——不管怎么样,提交的数据要与数据库中的一样!!!
——这里我就先不加密了(密码)
<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");
header("Content-type: text/html; charset=utf-8");
include('config/conn.php');
$username=$_POST['user'];
$password=($_POST['pass']);//注意MD5加密—————与数据库里的一样就行!!!
//echo $password;
$sql="select * from admins where username='$username' and password='$password'";
//echo $sql;
$result=mysql_query($sql,$conn);
if (mysql_num_rows($result)){
echo '成功';
header('Location: admin/add_news.php');
setcookie('user',$username);
}
else{
//echo '失败登录';
}
?>
——cookie设置的时候,在数据包里会携带账号密码;不然直接访问没有携带。
login_check.php-检查,作为包含文件
——放config下,检验用户的身份(为admin还是普通用户)
后台页面——先验证登录,才进行代码操作(防止直接访问)
<?php
$user=$_COOKIE['user'];
if($user != ''){ //单个验证,cookie可以修改,伪造,进行攻击。
echo '这里就是后台文章添加的页面';
}
else{
echo '你妹的,不能进入';
}
?>
add_news.php-后台界面
———放admin目录下,admin登录时验证(包含了验证文件)
<?php
header("Content-Type:text/html;charset=utf-8");
//先验证登录,再进行代码操作。
//1-cookie验证
//2-session验证
//cookie验证
include("../config/login_check.php");
?>
php编码
php 编码 —解决乱码问题
php utf-8编码:(php页面为url) header("Content-type: text/html; charset=utf-8");
php gbk编码: header("Content-type: text/html; charset=gb2312");
php big5编码 (繁体): header("Content-type: text/html; charset=big5");
如何创建 Cookie?–setcookie()
setcookie() 函数用于设置 cookie。
注释: setcookie() 函数必须位于 标签之前。
语法
setcookie(name, value, expire, path, domain);
实例 1
在下面的例子中,我们将创建名为 “user” 的 cookie,并为它赋值 “runoob”。我们也规定了此 cookie 在一小时后过期:
<?php
setcookie("user", "runoob", time()+3600);
?>
<html>
.....
注释: 在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码。(为防止 URL 编码,请使用
setrawcookie() 取而代之。)
php header跳转
php的header函数_php header-
CSDN博客
header(‘Location: RM新时代-首页’); //跳转到一个新的地址
演示案例-cookie验证脆弱问题
(熊海cms)
抓包后在cookie上面修改
——登录后,发现地址栏出现了传参,————所以我们给他修改一下——r=index————直接跳转到登录成功的界面。
————显然不行,可能cookie没有通过,
——抓包之后——看cookie
源代码:
![](https://img-
blog.csdnimg.cn/direct/a06307290c7443e19298dea82b8c0cff.png)![](https://img-
blog.csdnimg.cn/direct/28748769c8054495baa26316d60f4da4.png)
——————呵呵,这里直接修改一下cookie就行了
——进入后台。
白盒嘿嘿嘿~
黑盒测试就在cookie上面不断伪造就行了…
————注意cookie的存活时间,他是储存到浏览器里面的。
cookie盗取:
人家登录状态,伪造一下,xss利用盗取cookie。
无痕浏览不会储存…
session验证——————>
(打电话一样,一方挂了就没了,变了。)一旦PHPSESSID断了,就没了,
会话劫持。————人家正在浏览器浏览,没有断,才能干到。
——登录一次就产生一次,储存在服务器。
xxxSESSIONID —>session验证,和cookie没联系了;专注session!
session/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=$_POST['pass'];//注意密码加密
$sql="select * from admins where username='$username' and password='$password'";
$result=mysql_query($sql,$conn);
while($row=mysql_fetch_array($result)){//成功登录后
session_start();//产生创建一个会话。
$_SESSION['user'] = $row['username'];//将查询结果的值进行赋值。
header('Location: index.php');//跳转url,----------这里要特定指向,形成前后关联啊。--------------
}
?>
session/index.php-后台界面
<?php
header("Content-Type:text/html;charset=utf-8");
session_start();
$username=$_SESSION['user'];
if($username=='admin'){
echo '欢迎登陆管理员首页!';
}else{
echo "session,您不是管理员";
}
?>
验证码——————>
万能密码
[万能密码大全-
CSDN博客](https://blog.csdn.net/weixin_41680234/article/details/106559703?ops_request_misc=&request_id=&biz_id=102&utm_term=%E4%B8%87%E8%83%BD%E5%AF%86%E7%A0%81%E5%A4%A7%E5%85%A8&utm_medium=distribute.pc_search_result.none-
task-blog-2allsobaiduweb~default-0-106559703.142 “万能密码大全-CSDN博客”)
’ ’ OR 1=1#
注释符(过滤掉后边的) —> #
or 或者 ,两边只要有一个真就行。
验证码
code.php —生成验证码
<?php
session_start();//必须位于脚本的最顶端
$image=imagecreatetruecolor(100, 30);//imagecreatetruecolor函数建一个真彩色图像
//生成彩色像素
$bgcolor=imagecolorallocate($image, 255, 255, 255);//白色背景 imagecolorallocate函数为一幅图像分配颜色
$textcolor=imagecolorallocate($image,0,0,255);//蓝色文本
//填充函数,xy确定坐标,color颜色执行区域填充颜色
imagefill($image, 0, 0, $bgcolor);
$captch_code="";//初始空值
//该循环,循环取数
for($i=0;$i<4;$i++){
$fontsize=6;
$x=($i*25)+rand(5,10);
$y=rand(5,10);//位置随机
// $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));//随机的rgb()值可以自己定
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); //水平地画一行字符串
$captch_code.=$fontcontent;
}
$_SESSION['authcode']=$captch_code;//将变量保存再session的authcode变量中
//该循环,循环画背景干扰的点
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);// 水平地画一串像素点
}
//该循环,循环画干扰直线
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);
?>
f.php —引用了验证码code.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>简单验证码的实现</title>
</head>
<body>
<form method="post" action="">
帐号:<input type="text" name="user">
密码:<input type="password" name="pass">
<p>验证码图片:<img src="code.php" onClick="this.src='code.php?nocache='+Math.random()" style="cursor:hand" alt="点击换一张"/>点击图片可更换验证码</p>
<p>请输入图片中的内容:<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转化为小写的函数
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'];//讲查询结果的数据进行赋值
header("Location: admin/add_news.php");
}else{
echo '失败!';
//header("Location: login.php");
}
# code...
}
else{
echo"输入错误!";
}
exit();
}
?>
——验证码正确才能进入循环——再看账号密码
防爆破攻击 ------每一次登录验证码都要变!!!
抓包,看看验证码是否为一次性~
验证码识别———
接下来我将给各位同学划分一张学习计划表!
学习计划
那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:
阶段一:初级网络安全工程师
接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。
综合薪资区间6k~15k
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?
阶段二:中级or高级网络安全工程师(看自己能力)
综合薪资区间15k~30k
7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。
零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;
Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完
用Python编写漏洞的exp,然后写一个简单的网络爬虫
PHP基本语法学习并书写一个简单的博客系统
熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)
了解Bootstrap的布局或者CSS。
阶段三:顶级网络安全工程师
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
学习资料分享
当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。