• php防注入留言板(simple)


          新手学php,试手案例便是留言板。以前未连接数据库时,我是直接将用户输入的留言写入到一个txt,然后再从txt读取显示(~.~别鄙视)。

          最近学习了php访问MySQL数据库的一些知识,重写了一下留言板,功能比较简单,当学习记录。

      1.首先是提交留言的表单guessbook.php,提交至post.php。

    <form name="form1" method="post" action="post.php">
         <div >
            <label for="exampleInputName">用户名</label>
            <input type="text" name="name" placeholder="请输入用户名">
         </div>
         <div>
             <label for="exampleInputEmail">邮箱</label>
             <input type="email"  name="email" placeholder="请输入邮箱">
         </div>
         <div id="textarea">
             <textarea  rows="5" name="content" id="content"></textarea>
         </div>
         <div>
              <input type="submit" class="button" value="提交">
              <input type="reset" class="button"  value="重置">
         </div>
    </form>

      2.数据库的连接config.php

    <?php
        $con = mysql_connect("localhost","user","passwd");
        if(!$con)
            die('Could not connect: ' . mysql_error());
    
        mysql_query("set names utf8"); //以utf8读取数据
        mysql_select_db("dbname",$con); //选择数据库
    ?>

      3.对用户留言进行验证post.php

      在我们把数据插入数据库时,为了让我们输入的数据在显示时仍然保持最初的形式,就必须对数据进行一些处理。比如转义单引号和双引号,以及转义我们输入的html标签:<script></script>,空格,<p>等,如果不转义直接显示,比如js代码,就会直接在你的页面中运行。

         这里用到了htmlspecialchars函数,他会将字符串中的html标签转义成对应的html字符,比如 ’<’ 将被转义成 ’&lt;’。不过htmlspecialchars不会转义换行符 号,也就是说如果你插入的数据中包含了换行,当你进行转义显示时,该函数不会显示换行。所以在显示数据时需要用到nl2br函数

    <?php
        header("content-Type: text/html; charset=utf-8");
        include("config.php");                //数据库连接
        $name= $_POST['name'];
        $email= $_POST['email'];
        $patch = $_POST['content'];           //获取游客提交信息
        if ($name=="" || $email=="")          //游客未填写用户名和邮箱处理
        {
            echo "<script>alert('请检查用户名和邮箱输入!');location.href='./guessbook.php';</script>";
        }
        else
        {  
            // 对游客留言进行处理 
            $content = str_replace("","<br />",htmlspecialchars($patch));
            //插入数据库语句
            $sql = "insert into content (name,email,content,time) values ('$name','$email','$content',now())";
            mysql_query($sql);
            //插入成功,返回信息
            echo "<script>alert('提交成功!返回查看!');location.href='./guessbook.php';</script>";
        }    
    ?>

      4.展示用户留言列表,可在guessbook.php留言表单下面展示。

    include("config.php");                //连接数据库
    $sql="select * from content";         //数据库查询语句,content为该用户留言的表。
    $result = mysql_query($sql,$con);
    
    <table class="table table-responsive">
        <tr>
            <th>User</th>
            <th>Content</th>
            <th>Time</th>
        </tr>
        <p>
            <?php
                while ($row=mysql_fetch_array($result)) {
            ?>
        </p>
        <tr >
            <td><?php echo $row[1] ?></td>
            <td><?php echo nl2br($row[3]) ?></td>      <!--显示留言内容,使用nl2br函数处理换行-->
            <td><?php echo $row[4] ?></td>
        </tr>      
            <?php
                }
            ?>
    </table>

      5.基本结果: 经CSS 修饰后的结果如下:

      参考:《浅析php插入、更新数据时对html标签的转化 防注入》http://www.phptogether.com/archives/10907

  • 相关阅读:
    NXOpen测最最近距离和投影距离
    abp学习日志三(实体&聚合根)
    abp学习日志二(DDD)
    abp学习日记一(安装)
    abp学习日记 初记
    kubernetes学习——minikube入门
    windows10安装Kubernetes和MiniKube
    windows10安装docker desktop(非VMBox)
    Asp.netCore3.0 Docker 阿里云 部署 Demo
    小宝与老财
  • 原文地址:https://www.cnblogs.com/chenbjin/p/3475845.html
Copyright © 2020-2023  润新知