Web安全前后端基础

后端基础PHP—表单验证

1.什么是表单

表单在网页中主要 负责数据采集 功能。

一个表单有 三个基本组成部分

表单标签 :这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。

表单域 :包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。

表单按钮
:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。

使用场景:

登录框 搜索框 留言框 上传框 ……(各种框)

1624438454_60d2f6b6405b378f2606d.png!small?1624438452911|
1624438465_60d2f6c12dae5263df296.png!small?1624438463812
—|—

2.如何创建一个表单

表单标签

表单域 :即表单组件,主要有 文本框、密码框、隐藏域、复选框、单选框、文件上传框 多行文本框(文本域) 下拉选择框 ……

表单按钮 : 提交按钮 复位按钮 一般按钮

1624440999_60d300a7cb283470d0119.png!small?1624440998893

1624441055_60d300dfa6f3e4754ea6a.png!small?1624441056111

3.PHP和数据库交互

PHP如何实现人机交互,用户如何才能把自己写的东西给PHP PHP如何接收?

提交使用的就是表单

接收分为 三种

$_GET //接收GET传参

$_POST //接收POST传参

$_REQUEST //接收POST 和 GET传参

数组如何命名 $cars=array(“Volvo”,“BMW”,“Toyota”);

表单实际上做到的是将数据提交到后端脚本,然后后端脚本接受后进行处理

我们这里说的是 PHP和mysql数据库 交互:

我们会用到一个PHP的扩展mysqli (不用担心,这是自带的插件,我们可以理解为是一套函数就行了) 连接数据库
:mysqli_connect(‘127.0.0.1’,‘root’,‘root’,‘3_9’) (连接地址,连接账户,连接密码,连接数据库)

执行数据库语句 :mysqli_query( c o n n , conn, conn,sql) (数据库连接函数,执行的SQL语句)

通过数据库查询语句 执行后得到的数据是一个对象

我们需要 将对象转化为数组

从结果 集取所有对象变为数组 mysqli_fetch_array($result) (执行数据库获得的结果集)

1624450284_60d324ec5bc6aa512727d.png!small?1624450283323

数据库基础结构:

库 表 字段 数据 => 库就是仓库 表就如同xls表,字段就是表头,数据就是内容

4.实战

描述:写一个登陆表单,并实现其注册 + 登录功能。

2、注册和登录功能都必须有

提示: 登录成功后需要给回显

  1. 在Phpstudy的 根目录 (一般在Phpstudy的WWW目录)创建 login.php和register.php

1624528657_60d4571133038ff0d55ac.png!small?1624528656766

  1. 创建自己的库,表,字段,数据 。可以用 MySQL-Front

3) 代码

login.php:

<!DOCTYPE html>
<head> <meta charset="UTF-8"> <title>登录网页</title>
<style>
</style>
</head>
<h1>欢迎来到登陆界面! </h1>
<body>
<form name="login" action="login.php" method="post">
        用户名:<p><input type=text name="name"></p>
        密码:<p><input type=password name="password"></p>
        <input type="submit"  name="submit" value="登录" >
    <p>还没有账号?请去<a href="./register.php">注册账号</a></p>
    </form>
</body>
</html>

<?php
@$a = $_POST['name'];//'@'清除报错信息
@$b = $_POST['password']; //获取表单数据
$c = mysqli_connect('127.0.0.1','root','root','txtx'); //链接数据库
$s ="select*from wlb where username='$a' and password='$b'"; //查询数据库记录
$result = mysqli_query($c,$s); //执行函数
$d = mysqli_fetch_array($result);  //从结果集中取得一行作为关联数组
if (empty($_POST['name']) || empty($_POST['password'])) {
    die('用户名或密码为空');
    } //判断数据是否为空数据
if
 ($a == $d['username'] and $b == $d['password']) //比对数据库数据并判断
{
    echo $a.',欢迎回来 '; 
    exit;
}
else{
echo"登录失败,用户名不存在或密码错误";
} 
?>

register.php:

<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>用户注册页面</title>
<style>
</style>
</head>
<body>
<h1>注册页面</h1>
<form action="register.php" method="post">
<p>用户名:<input type="text" name="name"></p>
<p>密 码: <input type="password" name="password" ></p>
<input  type="submit" name="submit" value="注册"  >
<p>已有账号?请前往<a href="./login.php">登录</a></p>
</form>
</body>
</html>	 
   
<?php  
@$name=$_POST['name'];  
@$password=$_POST['password']; //获取表单数据  
$conn = mysqli_connect('127.0.0.1','root','root','txtx'); //链接数据库  
$sql="select *from wlb where username='$name'";  
$result = mysqli_query($conn,$sql); //执行函数  
$fetch = mysqli_fetch_array($result);   
if (!isset($_POST['name']) || !isset($_POST['password'])) {  
die('缺少用户名密码');   
}  
if (empty($_POST['name']) || empty($_POST['password'])) {  
die('用户名或密码为空');  
}   
//判断数据是否为空数据  
if($fetch['username']==$name)  
{  
die('该用户已注册');  
}  
else{  
$insert="insert into wlb(username,password) values('$name','$password')";  
//往数据库插入表单数据  
mysqli_query($conn,$insert);  
echo "注册成功";  
}  
?>

4)验证效果:

进入登录页面

输入正确的账号密码:

|
1624529846_60d45bb63da0302387c4e.png!small?1624529845333
—|—
输入错误的账号密码:|
1624529943_60d45c17734543437f575.png!small?1624529942612
—|—
输入空的账号或密码:|
1624530250_60d45d4a6a7de3ac4faa5.png!small?1624530249488
—|—

进入注册界面

注册 非空且账号不为wlb

账号和密码:

|
1624531757_60d4632d620bf53af1639.png!small?1624531756343
—|—
注册的数据成功进入数据库|
1624544316_60d4943cb360b417bbd2b.png!small?1624544316102
—|—
若注册空的账号或密码|
1624544596_60d495544ee6d317aa949.png!small?1624544595651
—|—
若注册相同的用户名|
1624544731_60d495dbdd6c44ea96595.png!small?1624544731388
—|—

用新的账号密码登录

1624545148_60d4977c5062aaec45202.png!small?1624545147472|
1624545156_60d497844c41a348ba64a.png!small?1624545155462
—|—

PHP后端基础—正则表达式

1.初识别SQL注入

登录代码 后端的php代码

1624598320_60d56730f08e6ffb24be5.png!small?1624598321664
发现在登录密码框里面写 'or 1=1# 也能登录成功

什么是注入:

注入攻击的本质,是 把用户输入的数据当做代码执行

两个关键条件:

第一个 是用户能够控制输入

第二个 是原本程序要执行的代码,拼接了用户输入的数据然后进行执行

SQL注入:

户输入的数据当做 SQL语句 的代码执行

常见的防护软件主流核心:

通过正则来过滤传参

2.什么是正则表达式?

正则表达式 (英语:Regular Expression,常简写为regex、regexp或RE),又称 正则表示式
正则表示法规则表达式常规表示法 ,是计算机科学的一个概念。正则表达式使用
单个字符串来描述、匹配一系列匹配某个句法规则的字符串 。在很多文本编辑器里,正则表达式通常被用来 检索、替换那些匹配某个模式的文本

正则表达式的 特点

1. 灵活性、逻辑性和功能性非常强;

2. 可以迅速地用极简单的方式达到字符串的复杂控制。

3. 对于刚接触的人来说,比较晦涩难懂。

正则表达式 用途

判断字符串是否符合某一规则 (判断是否符合手机号、邮箱规则)。

从一个字符串中找出符合规则的所有子字符串 (取HTML标签名)。

3.PHP中的正则表达式:

注:HP中使用正则规则一定要加代表正则的标识/ /

preg_match_all (正则表达式、匹配字符串、匹配到的东西放入数组)

返回 匹配到的次数

preg_replace (正则表达式、替换成什么、匹配字符串)

返回 替换后的结果

替换 支持数组 格式

4.正则表达式的语法

字符:

常用 转义字符

数字:\d 非数字:\D

空白字符(空格、制表符、换页符等):\s 非空白字符:\S

单词字符(26个英文字母+数字+下划线_):\w 非单词字符:\W

自定义字符结合

字符集合 :[单个字符或字符区间],用于 匹配集合内字符.

如:

[a-z] 表示a-z这26个小写字母

[0-9a-z] 表示0-9这10个数字和a-z26个小写字母

[135a-h] 表示包含数字1,3,5和字母a-h这8个字母

注意:两个不同字符段间请 勿使用,隔开

非集 :[^单个字符或字符区间],用于 匹配非集合内字符

如:

[^0-9] 表示匹配所有非数字字符。

[^a-zA-Z] 表示匹配所以非字母字符。

关键字:

() => 和数学一样很像,代表这是一个整体。

^ => 匹配输入字符串的开始位置

$ => 匹配输入字符串的结尾位置

. => 通配符[代表任意字符][不匹配换行]

  •    => 匹配0次或者多次
    

+ => 匹配1次或者多次

\ => 转义字符
| => 两项之间的一个选择。

限定符加修饰符:

限定符:

{n} => 例如: 0{8} 意思是指 只有连起来8个0才会被匹配

{n,} =>例如: 0{2,} 意思是 只要有2个0及其以上的就会被匹配

{n,m} => 例如: 0{2,4} 意思是最少匹配2个0,最多匹配4个0

注:被匹配时, 默认匹配最多的次数

修饰符:

/i => **不区分大小写 **

/A => 匹配规则必须 从头开始匹配

/s => .将 匹配一切字符

/x => 正则表达式中的 空白字符会被忽略

5.实战正则

代码段:

<?php  
$key='flag{********************************}'; 
$Regular= preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match); 
if( $Regular ){  
  die('key: '.$key); 
} 

解题思路:

代码中当 if 语句 中的 $Regular 为真时, 结束运行并输出字符key:和变量key ,从而 得到flag
preg_match()函数: 按正则表达式去匹配字符串, 匹配到一次就停止并返回1,没有匹配到则返回0
trim()函数, 去除字符串两端空白符

正则解析:

1.zkaq ==>zkaq
2..* ==>除换行符外匹配任意字符0次或多次(可选0次 直接忽略)
3.key ==>key
4..{2,9} ==>除换行符外匹配任意字符最少2次最多9次(可选字符2和1)
5.: ==>:
6./ ==>转义斜杠(/)
7.( ) ==>代表一个整体
8.key* ==>ke y*匹配0次或多次
9./i ==>不区分大小写
10.最后结果 ==>zkaqkey21://kekey

将结果GET传参赋值给参数id,得到FLAG。

分享一个掌控安全的0基础福利编程课程:

====》先有了基础才能后面才能学的更快哦。

链接:https://pan.baidu.com/s/1oVdSaSwWSoo0u0ASsNPhcA
提取码:TXTX

kaq
—|—
2.| .* ==>除换行符外匹配任意字符0次或多次(可选0次 直接忽略)
3.| key ==>key
4.| .{2,9} ==>除换行符外匹配任意字符最少2次最多9次(可选字符2和1)
5.| : ==>:
6.| / ==>转义斜杠(/)
7.| ( ) ==>代表一个整体
8.| key* ==>ke y*匹配0次或多次
9.| /i ==>不区分大小写
10.| 最后结果 ==>zkaqkey21://kekey

将结果GET传参赋值给参数id,得到FLAG。

分享一个掌控安全的0基础福利编程课程:

====》先有了基础才能后面才能学的更快哦。

链接:https://pan.baidu.com/s/1oVdSaSwWSoo0u0ASsNPhcA
提取码:TXTX

学习网络安全技术的方法无非三种:

第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。

第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

第三种就是去找培训。

image.png

接下来,我会教你零基础入门快速入门上手网络安全。

网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。

第一阶段:基础准备 4周~6周

这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
image.png

第二阶段:web渗透

学习基础 时间:1周 ~ 2周:

① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
image.png

配置渗透环境 时间:3周 ~ 4周:

① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。

渗透实战操作 时间:约6周:

① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
image.png
以上就是入门阶段

第三阶段:进阶

已经入门并且找到工作之后又该怎么进阶?详情看下图
image.png

给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

![](https://img-blog.csdnimg.cn/3e9a39bf040d46da93e80689b407bb25.png)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值