php表单验证

文章展示了一个简单的HTML表单用于用户登录和注册,通过PHP连接MySQL数据库进行数据处理。然而,当输入特殊字符如or、and时,即使数据库无记录,用户也能成功登录,揭示了SQL注入漏洞。为解决此问题,文章提出了使用正则匹配限制用户输入,防止非法字符,增强系统安全性。
摘要由CSDN通过智能技术生成

写了一个简单的html表单,提交后通过php处理,连接到mysql数据库,从而完成注册和登录的功能。

html表单页面。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录注册页面</title>
</head>
<body>
    <form action="login.php" method="post">
        账号:<input type="text" name = 'username'><br>
        密码:<input type="password" name="password"><br>
        登录:<input type="radio" name="login"><br>
        注册:<input type="radio" name="regedit"><br>
        <input type="submit" value="提交">
    </form>
    
</body>
</html>

php表单验证

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录注册详情</title>
</head>
<body>
    
</body>
</html>
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$dl = $_POST['login'];
$zc = $_POST['regedit'];




$conn = mysqli_connect('127.0.0.1','root','root');
mysqli_select_db($conn,'php');

if($dl == 'on'){
    $sql = "select * from userinfo where name = '$username'&& pass = '$password'";
    $result = mysqli_query($conn,$sql);
    $srow = mysqli_fetch_array($result);

    if($srow != null){
        echo'<h1>登录成功</h1>';
    }
    else{
        echo'<h1>登录失败</h1>';

    }
}
if($zc == 'on'){
    $sql = "insert into userinfo value('$username','$password')";
    $result = mysqli_query($conn,$sql);
    $srow = mysqli_fetch_array($result);
    echo'<h1>注册成功!</h1>';
}
?>

可以成功地进行登录和注册。

数据库中也可以看到注册的用户。

但这个时候会出现一个问题,输入一些特殊字符,即便数据库中没有该用户的记录也可以成功登录。

解决办法:可以加入正则匹配来限制用户的输入。

$zhengze = preg_match_all('/or|and|\'/',$username);
if($zhengze != 0){
    die('<h1>请别输入非法字符</h1>');
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值