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

原文地址:https://www.cnblogs.com/chenbjin/p/3475845.html