电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 1585 人浏览分享

Web安全前后端基础

[复制链接]
1585 0
后端基础PHP—表单验证

1.什么是表单
表单在网页中主要负责数据采集功能。
一个表单有三个基本组成部分:
表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。
表单域:包含了文本框 密码框 隐藏域 多行文本框 复选框 单选框 下拉选择框和文件上传框等。
表单按钮:包括提交按钮 复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入
还可以用表单按钮来控制其他定义了处理脚本的处理工作。

使用场景:

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



2.如何创建一个表单
表单标签: <form action= "URL" method="GET/POST" >
表单域:即表单组件 主要有 文本框 密码框 隐藏域 复选框 单选框文件上传
框 多行文本框(文本域) 下拉选择框 ……
表单按钮: 提交按钮 复位按钮 一般按钮




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($conn,$sql)  (数据库连接函数,执行的SQL语句)
通过数据库查询语句执行后得到的数据是一个对象,
我们需要将对象转化为数组
从结果集取所有对象变为数组 mysqli_fetch_array($result) (执行数据库获得的结果集)


数据库基础结构:

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


4.实战
描述:写一个登陆表单 并实现其注册 + 登录功能。
2、注册和登录功能都必须有
提示:    登录成功后需要给回显
1)  在Phpstudy的根目录(一般在Phpstudy的WWW目录)创建  login.php和register.php


2) 创建自己的库 表 字段 数据。可以用MySQL-Front

3) 代码

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

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

register.php:
  1. <!DOCTYPE html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <title>用户注册页面</title>
  5. <style>
  6. </style>
  7. </head>
  8. <body>
  9. <h1>注册页面</h1>
  10. <form action="register.php" method="post">
  11. <p>用户名:<input type="text" name="name"></p>
  12. <p>密 码: <input type="password" name="password" ></p>
  13. <input  type="submit" name="submit" value="注册"  >
  14. <p>已有账号?请前往<a href="./login.php">登录</a></p>
  15. </form>
  16. </body>
  17. </html>         
  18.    
  19. <?php
  20. @$name=$_POST['name'];
  21. @$password=$_POST['password']; //获取表单数据
  22. $conn = mysqli_connect('127.0.0.1','root','root','txtx'); //链接数据库
  23. $sql="select *from wlb where username='$name'";
  24. $result = mysqli_query($conn,$sql); //执行函数
  25. $fetch = mysqli_fetch_array($result);
  26. if (!isset($_POST['name']) || !isset($_POST['password'])) {
  27. die('缺少用户名密码');
  28. }
  29. if (empty($_POST['name']) || empty($_POST['password'])) {
  30. die('用户名或密码为空');
  31. }
  32. //判断数据是否为空数据
  33. if($fetch['username']==$name)
  34. {
  35. die('该用户已注册');
  36. }
  37. else{
  38. $insert="insert into wlb(username,password) values('$name','$password')";
  39. //往数据库插入表单数据
  40. mysqli_query($conn,$insert);
  41. echo "注册成功";
  42. }
  43. ?>
复制代码

4)验证效果:

进入登录页面

输入正确的账号密码:


输入错误的账号密码:


输入空的账号或密码:        


进入注册界面



注册非空且账号不为wlb的

账号和密码:


注册的数据成功进入数据库        


若注册空的账号或密码


若注册相同的用户名        

用新的账号密码登录


PHP后端基础—正则表达式

1.初识别SQL注入

登录代码后端的php代码


发现在登录密码框里面写 '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.实战正则

代码段:
  1. <?php  
  2. $key='flag{********************************}';
  3. $Regular= preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match);
  4. if( $Regular ){  
  5.   die('key: '.$key);
  6. }
复制代码

解题思路:
代码中当 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基础福利编程课程:

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.