网络安全从入门到精通(第三章-下)

				接上!!!,有什么问题大家留言,私信即可
				本文内容:
					~php连接数据库
					~Php表单验证
					~正则表达式
===========================================================

四,Php连接数据库

1,获取传参
	<?p
		a = $_GET['id'];		@a=GET['id']  加@就是假如出错不回显(一句马较喜欢用)
		echo $a."<br />";
		
		b = $_POST['username'];
		echo $b."<br />";
		
		c = $_COOKIE['user'];
		echo c."<br />";
	?>
	
2,使用数据库
	<?php
		//连接数据库
		方法一:
			$conn = mysqli_connect("127.0.0.1","root","root","db_name");
			//		   	函数		IP         账户	  密码   指定数据库(可以不指定)
		方法二:
			$conn = mysqli_connect("127.0.0.1","root","root");
			mysqli_select_db($conn,"db_name");
		
		//执行查询语句,并存储在数据集中
		$result = mysqli_query($conn,"select * from bbb");

		//读取数据集中的内容(该函数读取结果集中的第一个记录)
		$row = mysqli_fetch_row($result);
		
			$row = mysqli_fetch_all($result); //读取结果集的全部数据
		
		//输出结果
		var_dump($row);
		
		//关闭数据库连接
		mysqli_close($conn);
	?>
	示例:
		<?php
			$conn = mysqli_connect("127.0.0.1","root","root","关联规则");
				//连接数据库
			$result = mysqli_query($conn,"select * from python");
				//将执行的结果集返回保存到result中
			while($row = mysqli_fetch_array($result)){
				//循环遍历结果集,并输出
				echo "因:".$row['前项'];
				echo "果:".$row['后项'];
				echo "<br />";}
			//$a = mysqli_fetch_row($result);
			//var_dump($a)		//输出结果集a的内容
			mysqli_close($conn);
			//关闭数据库连接
		?>
3,预防Sql注入:
	~过滤敏感信息/恶意代码。strpos() strtr()
	~使用类型转换,避免提交异常数据导致报错。(int)$a
	~使用数据库操作中的预处理,将查询与数据分离[高级用法-PDQ]
	
4,补充:		echo与var_dump区别:
		理解:	echo 可以输出字符串与数字  ;
				var_dump()(可以查看数组,对象;将查询结果放到数组中)
				die("xx")	输出xx内容,终结程序
				
存在拼接语句并没有过滤就有Sql注入

五,Php表单验证

1, 什么是表单
		标志是--> form标签	注意区分from(Sql语句中的)
		主要功能是采集数据
2,表单标签
	~action		处理表单数据的地方,不写提交给本页面(可相对路径)
	~method		传参方式:GET(穿的少,穿的快)与POST(穿的多,穿的慢)
	~target		= _blank	在新窗口打开
				= _self		默认,在相同的框架打开		
				= _parent	在父框架打开
				= _top		在整个窗口打开
		//建议挨边试试!!
3,<input type = password,text>		可以显示密码
	所有基于前端的验证都是不安全的,只能靠服务器验证
	
4,一些简单函数的过滤(真正的一般不用这些函数,用正则表达式去过滤验证)
		//这些函数直接百度,即出现详细用法
		
	~strlen()	判断字符串长度是否为0
	~count()		判断数据元素个数
	~stripos(要查找的内容,需要查找的东西)
		例:	
			//查找 "php" 在字符串中第一次出现的位置
			<?php
			echo stripos("You love php, I love php too!","PHP");
			?>		//输出9
			
	~is_numeric()		如果是数字返回true,否则返回false
	~is_array()			数组返回true,否则false
	~is_null()			为空返回true,否则返回false
	
5,php与数据库的交互
	<?php
		@$uname = $_POST['username'];			//“@”的作用是,假如出现错误,不回显给前端。防止内部数据泄露
		@$passwd = $_POST['password'];
		$conn = mysqli_connect('127.0.0.1','root','dbname;')
		$sql = "select*from admin where uname='$uname' and passwd='$passwd'";
		$abc = mysqli_query($conn,$sql);
		$xxx = mysqli_fetch_array($abc);
		if($xxx['uname'] === $uname and $xxx['passwd'] === $passwd){
			echo '登录成功';
		}
		else{echo '用户名或密码错误';}
	?>
	
	
	
	
总结:
	表单的作用就是将数据提交到后端脚本,后端脚本对其进行处理
	正常网站组成:中间件,动态脚本语言,数据库

六,正则表达式

	1,常用转义字符:
			\d	数字
			\D	非数字
			\s	空白字符(空格、制表符、换页符等)
			\S	非空白字符
			\w	单词字符(26字母+数字+下划线_)					//重要!!!
			\W  非单词字符										//重要!!!
			
			\t	制表符
			\r	回车符
			\n	换行符
			\	转义
			$	匹配结尾
			^	匹配开始				//注意:	/ab/  ===  /^ab$/
			.	匹配换行符之外所有字符一次
			*	匹配前一个字符,但是不限次数(0-n次)
			+	匹配前一个字符(1-n次)
		限定符:	
			{n}		   例如:0{3}--->仅匹配3个0连起来的情况,如6000		
			{n,}	   例如:0{2,}-->只要有2个0及其以上的就会被匹配
			{n,m}	   例如:0{2,4}->最少匹配2个,最多4个
					   但是被匹配时,默认匹配最多的次数
					   10000 0000 00	-->匹配到3次
		修饰符:
			/i		匹配忽略大小写
					例如 :
							/'abc'/i		可以匹配到Abc45
			/A		匹配规则必须从头开始
					例如 :
							/'abc'/A		可以匹配到abc45
			/x		匹配表达式中的空
					例如 :
							/'a bc'/x		可以匹配到abc45
			修饰符可以联合使用,如/正则规则/Aix
		补充:小写匹配什么,大写就是匹配除此之外的
		
			[0-9a-z]	匹配0~9,a~z之间所有
			[135a-h]	匹配1,3,5和a~h之间所有
			[^0-9]		匹配除了0~9之外的东西			//符号在不同地方意义不同
			
		补充:区间的话只能写单位,不能写多位[0-3]可以,[400-500]不可以
			  多位不稳定
			
	2,php中的正则表达式(又名规则表达式)
		计算机科学的一个概念。通常用作:
			~判断字符串是否符合某一规则(比如:是否符合手机号、邮箱规则等)。
			~从一个字符串中找出符合规则的所有字符串(取HTML标签名)。
	
		
		php中使用正则一定要加“ // ” ,这是格式。
		
		~preg_match(正则表达式,匹配的字符串)
			匹配字符串中的正则表达式,找到返回1,未找到返回0
			例如:
				<?php
					$a = 'a1';
					$b = '/[0-9]/';
					echo preg_match($b,$a);
				?>
		~preg_replace(正则规则,'替换内容',检验字符串)						//重要!!!
			例如:
				<?php
					$a = 'aabbcc136asd';
					$b = '/[0-9]/';
					$c = preg_replace($b,'love',$a);
					echo $c;
				?>
				输出内容:
					aabbccloveloveloveasd
					
				例如二:
				<?php
					$a = array('abc','aabc','ccabc');
					var_dump(preg_replace('/abc/','love',$a));
				?>
				输出内容:
					array(3){[0]=>string(4)"love"[1]=>string(5)"alove"[2]=>string(6)"cclove"}
					
			例如:防范sql注入:
				<?php
					$a = '1 union select 1,2';
					$b = '/\W|and|or|union|order|0x/';			//0x过滤编码注入
					$c = preg_replace($b,'',$a);
					$d = 'select * from admin where id ='.$c;
					echo $d;
				?>
				输出:select * from admin where id =1select12
				
				
	注意:
			sql注入的核心就是用户输入的不可信数据被当作代码执行

	
			正则表达式主要用在防御即过滤上,可以有效防御sql注入、xss、html注入等
发布了24 篇原创文章 · 获赞 3 · 访问量 1750

猜你喜欢

转载自blog.csdn.net/weixin_43970718/article/details/103948167
今日推荐