网络安全零基础入门(第三章-2)PHP连接数据库、PHP正则表达式

  • 每日一句:php语法是渗透测试无可或缺的,尤其是是在web应用开发扮演者重要角色。
         所有基于前端的验证都是不安全的,必须靠服务器验证。
  • 本篇内容:php连接数据库
         php表单验证
         正则表达式

一、php连接数据库

1.获取传参

	<?php
	a = $_GET['id'];     @a = GET['id'] 加@就是假如出错不回显(一句话木马较喜欢用)
	echo $a."<br />";
	
	b = $_post['username'];
	echo $b."<br />"
	
	c = $_COOKIE['user'];
	echo c."<br />";
	?>

2.使用数据库

	<?php
	 连接数据库
	  方法一:
		  $conn = mysql_connect("127.0.0.1","root","passwword","db_name");
		        //函数			IP	  账户   密码    指定数据库(可不指定)
	  方法二:
		  $conn = mysql_connect("127.0.0.1","root","passwword");
		  mysql_select_db($conn,"db_name");
		  
	   $result = mysql_query($conn,"select * from a");
	    //执行查询语句,并存储在数据集中
	   
	   $row = mysql_fetch_row($result);
      //读取数据集中的内容(该函数)读取结果集中的第一个记录)
    
	
	   $row = mysq_fetch_all($result);
	    //读取结果集的全部数据
	
	   var_dump($row);
	    //输出结果
	
	   mysql_close($conn);
	    //关闭数据库连接
   ?>

 示例:
	<?php
		
		$conn = mysql_connect("127.0.0.1","root","passwod","数据库名");
		    //连接数据库
			
		$result = mysql_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的内容
		mysql_close($conn);	//关闭数据库连接
	?>

3.预防SQL注入:
  过滤敏感信息(恶意代码)。strpos()、strtr()
  strpos()  //strpos() 函数返回字符串在另一个字符串中第一次出现的位置。
  strtr()  //函数转换字符串中特定的字符。
  适用类型转换。避免提交异常数据导致报错。(int)$a
  使用数据库操作中的预处理,将查询与数据分离[高级用法-PDQ]

4.补充:echo与var_dump的区别:
  echo() ——函数输出一个或多个字符串。
  echo()——函数实际不是一个函数,所以您不必对它使用括号。然而,如果您希望向 echo() 传递一个以上的参数,使用括号将会生成解析错误。
  var_dump()——可以查看内部结构信息,数组类型,将结果放到数组中。输出展示展示代码内容,结构与类型。该函数作可以窥探所有内容的类型,以及内部信息。该函数是调试、打印、输出、展示类型函数(若是数组,则以数组的形式输出)
  die(“xx”)——输出xx的内容,终结程序

二、php表单验证

1.什么是表单
  标志是–>form标签
  主要功能是采集数据
  
2.表单标签

  • action 处理表单数据的地方,不写的话提交给本页面(可相对路径)
  • methon 传参方式:GET(传得少,传得快)与 POST(传得多,传得慢)
  • target =_blank 在新窗口中打开链接
  • =_parent 在父窗体中打开链接
  • =_self 在当前窗体打开链接,此为默认值
  • =_top 在当前窗体打开链接,并替换当前的整个窗体(框架页)
    例如:<a href="document.html" target="_blank">请点击</a>

3.<input type = password,text> 可以显示密码,

4.一些简单函数的过滤(真正的一般不用这些函数,用正则表达式去过滤验证)。
   这些函数直接百度,即出现详细用法
   
   strlen() 判断字符串长度(但不包括结束字符null)
   count() 判断数据元素个数
   strpos(要查找的内容)
   
   例如:查找"php"在字符串中第一次出现的位置

		<?php
			echo strpos("You love php,I love php tool!","php")
				//strpos 对大小写敏感,输出9
			echo stripos("You love php,I love php tool!","PHP")
				//stripos 对大小写不敏感,输出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','password','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中使用正则一定要加“//”,这是格式。

3.preg_match(正则表达式,匹配的字符串)
  匹配字符串中的正则表达式,找到 返回1,未找到返回0

例如:
 <?php
	 $a = 'a1';
	 $b = '/[0-9]/';
	 echo preg_match($b,$a)		//b中是否有a中的字符串,有则返回1,否则返回0
	?>
	
	preg_replace(正则表达式,'替换内容,检验字符串)
	
例如:
 <?php
	 $a = 'aabbcc136asd';
	 $b = '/[0-9]/';
	 $c = preg_replace($b,'love',$a);
	 echo $c;
 ?>
			输入内容:aabbccloveloveloveasd
			
例2:以数组的形式输出
 <?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注入等;
  • 存在拼接语句并没有过滤掉就有SQL注入(SQL注入本质);
  • 表单的作用就是将数据提交到后端脚本,后端脚本对其进行处理
  • 正常网站组成:动态脚本语言,中间件(Tomcat、JBOSS),数据库web容器
发布了5 篇原创文章 · 获赞 0 · 访问量 176

猜你喜欢

转载自blog.csdn.net/weixin_43660456/article/details/105024997