0
点赞
收藏
分享

微信扫一扫

04web安全学习---PHP表单验证

秀儿2020 2023-06-03 阅读 86

04web安全学习---PHP表单验证_html

一、什么是表单?

04web安全学习---PHP表单验证_mysql_02

二、如何创建一个表单

表单的一个最简单的写法:

<form action="https://www.baidu.com/s">
<input name='wd' />
<input type='submit' />
</form>

04web安全学习---PHP表单验证_mysql_03

04web安全学习---PHP表单验证_html_04

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
	<form action="1.html" method="get">
		<input type="text" />普通文本框<br />
		<input type="password" />密码文本框<br />
		<input type="number" />数字文本框<br />
		<input type="file" />上传框<br />
		<input type="radio" name="dx"value="单选"/>单选框<br />
		<input type="checkbox" value="多选"/>多选<br />
		<input type="button" />按钮<br />
		<input type="submit" />提交<br />
		<input type="image" src="https://img0.baidu.com/it/u=4162443464,2854908495&fm=253&fmt=auto&app=138&f=JPEG?w=1000&h=800"/>图片提交按钮<br />
		<input type="reset" />重置<br />
		<select name="月">
			<option value=1>1月</option>
			<option value=2>2月</option>
			<option value=3>3月</option>
			<option value=4>4月</option>
			<option value=5>5月</option>
			<option value=6>6月</option>
			<option value=7>7月</option>
			<option value=8>8月</option>
			<option value=9>9月</option>
			<option value=10>10月</option>
			<option value=11>11月</option>
			<option value=12>12月</option>
			<option value=nf>nf月</option>
		</select><br />
		<textarea>留言板</textarea>
</body>
</html>

04web安全学习---PHP表单验证_mysql_05

三、PHP和数据库交互

04web安全学习---PHP表单验证_sql_06

例:

//比较简单的用户登录页面
<meta charset='GBK' />
<form><center>
	用户登录<br />
  账号: <input type='text' name='uname' /><br />
  密码: <input type='password' name='pwd'/><br />
  <input type='submit' value='登录'>
</form></center>
<?php
$username = $_REQUEST['uname'];
$password = $_REQUEST['pwd'];
?>

会出现一下报错,只需要在$username,$password前加上@符即可

04web安全学习---PHP表单验证_html_07

代码修改为:

<meta charset='GBK' />
<form><center>
	用户登录<br />
  账号: <input type='text' name='uname' /><br />
  密码: <input type='password' name='pwd'/><br />
  <input type='submit' value='登录'>
</form></center>
<?php
@$username = $_REQUEST['uname'];//修改的在这里
@$password = $_REQUEST['pwd'];//修改的在这里
?>

效果如下:

04web安全学习---PHP表单验证_mysql_08

添加一个逻辑判断:

<meta charset='GBK' />
<form><center>
	用户登录<br />
  账号: <input type='text' name='uname' /><br />
  密码: <input type='password' name='pwd'/><br />
  <input type='submit' value='登录'>
</form></center>
<?php
@$username = $_REQUEST['uname'];
@$password = $_REQUEST['pwd'];
if(isset($_REQUEST['uname'])){  
if($username=='admin' and $password=='123456'){
	echo '登录成功';
}else{echo '账户密码错误';}}
?>

代码说明:isset()函数用来检测变量是否存在。

04web安全学习---PHP表单验证_sql_09

效果如下:

当输入1231,132132的时候,提示密码错误,如下图:

04web安全学习---PHP表单验证_sql_10

当输入admin, 123456的时候,提示登录成功,如下图:

04web安全学习---PHP表单验证_sql_11

PHP连接数据库操作:

mysqli_connect(连接地址, 账户 ,密码, 库名);
mysqli_query(连接, 要执行的SQL语句);
mysqli_fetch_array()  //把对象变成数组
sql的两种写法,注意单双引号的区别:
1.$sql = "select * from admin where username='$username' and password='$password'";
2.$sql = 'select * from admin where username="'.$username.'" and password ="'.$password.'"';

<meta charset='GBK' />
<form><center>
	用户登录<br />
  账号: <input type='text' name='uname' /><br />
  密码: <input type='password' name='pwd'/><br />
  <input type='submit' value='登录'>
</form></center>
<?php
@$username = $_REQUEST['uname'];
@$password = $_REQUEST['pwd'];
if(@$_REQUEST['uname'] != '' and @$_REQUEST['pwd'] != ''){  
	$conn = mysqli_connect('127.0.0.1', 'root', 'root', 'test'); //数据库的连接
	$sql = 'select * from admin where username="'.$username.'" and password ="'.$password.'"';
	$b = mysqli_query($conn, $sql); //sql语句的执行
	$c = mysqli_fetch_array($b); //将数据库里的对象变为数组
  echo "你的密码是: ".$c['password'];  //获取数据
}else{echo '账户密码错误';}  
?>

效果如下:

04web安全学习---PHP表单验证_mysql_12

S

admin "or 1=1 -- qwe

select * from admin where username="admin" and password =""or 1=1 -- qwe"

04web安全学习---PHP表单验证_sql_13

04web安全学习---PHP表单验证_html_14

-- 空格 表示注释   # 是mysql特殊注释
SQL注入的原理:
		用户输入的数据被当做SQL代码执行
防御:
		检测传参内容,然后进行拦截。


举报

相关推荐

0 条评论