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字符,比如 ’<’ 将被转义成 ’<’。不过htmlspecialchars不会转义换行符\r\n号,也就是说如果你插入的数据中包含了换行,当你进行转义显示时,该函数不会显示换行。所以在显示数据时需要用到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
php防注入留言板(simple)的更多相关文章
- asp防注入安全问题
一.古老的绕验证漏洞虽然古老,依然存在于很多小程序之中,比如一些企业网站的后台,简单谈谈.这个漏洞出现在没有对接受的变量进行过滤,带入数据库判断查询时,造成SQL语句的逻辑问题.例如以下代码存在问题: ...
- dede留言板BUG解决
dede留言板刷新后空白BUG解决 DEDE留言板验证码留空或者不正确返回空白页面的解决方法 解决方法如下进入文件/plus/guestbook.php 找到代码ShowMsg("验证码不正 ...
- Flask实战-留言板-安装虚拟环境、使用包组织代码
Flask实战 留言板 创建项目目录messageboard,从GreyLi的代码中把Pipfile和Pipfile.lock文件拷贝过来,这两个文件中定义了虚拟环境中需要安装的包的信息和位置,进入m ...
- PHP SQL防注入
过年前后在做一个抽奖的东西,需要用户填写中奖信息,为了防止非法用户对数据库进行入侵神马的,于是写下基本的防注入语句,需要用的可以自己封装成一个function. $str = str_replace( ...
- XSS留言板实现
XSS 留言板实现-笔记 预备知识 XSS漏洞 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS ...
- 写一个简单的HTML留言板
最近有点懒,没码什么字,防止遗忘,从头开始码,写一个简单的HTML留言板.包含两个文件,book.html还有style.css,放在同一目录下. book.html 1 <!DOCTYPE h ...
- AngularJs学习笔记(制作留言板)
原文地址:http://www.jmingzi.cn/?post=13 初学Anjularjs两天了,一边学一边写的留言板,只有一级回复嵌套.演示地址 这里总结一下学习的过程和笔记.另外,看看这篇文章 ...
- dd——留言板再加验证码功能
1.找到后台-核心-频道模型-自定义表单 2.然后点击增加新的自定义表单 diyid 这个,不管他,默认就好 自定义表单名称 这个的话,比如你要加个留言板还是投诉建议?写上去呗 数据表 这个不要碰, ...
- asp.net留言板项目源代码下载
HoverTree是一个asp.net开源项目,实现了留言板功能. 前台体验网址:http://hovertree.com/guestbook/ 后台请下载源代码安装. 默认用户名:keleyi 默认 ...
随机推荐
- mysql 远程连接速度慢的解决方案
PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在MY.INI(WINDOWS ...
- NSString length的坑。
说坑,可能过头了,是我理所当然的把OC看作C了, char* cstr = "zh中文12"; NSString* s = [NSString stringWithUTF8Stri ...
- C++-Effective C++ Items
Item2:尽量以const,enum,inline替换#define 原因:1, #define ASPECT_RATIO 1.63 编译错误时产生魔数,应以const double Aspect_ ...
- CSU 1160 A(Contest #3)
Description 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示. Input 每行一个整数x,0<= x <= 2^31. Output 每行输出对应的 ...
- hdu 1031 (partial sort problem, nth_element, stable_partition, lambda expression) 分类: hdoj 2015-06-15 17:47 26人阅读 评论(0) 收藏
partial sort. first use std::nth_element to find pivot, then use std::stable_partition with the pivo ...
- linux内核编译
1,进入内核源码树,如果是第一次编译,建议清理以下内核功能选择文件: make mrproper 2,删除前一次编译的残留文件: make clean 3,配置内核功能 make menuconfig ...
- linux的简单网络配置
1,修改IP edit file: # if rh family system /etc/sysconfig/network-scripts/ifcfg-eth0 (eth0可能会是别的名字) # i ...
- git——学习笔记(二)远程仓库
GIT杀手锏之一——远程仓库 拥有远程仓库的两个办法 1:搭一个Git服务器 2:在GitHub上免费托管的Git仓库 本地仓库 远程仓库 一.在GitHub上免费托管的Git仓库 电脑: 1. ...
- sql学习资料
http://blog.sina.com.cn/s/articlelist_1594135432_9_1.html
- C++11的new concepts (move semantic)
MoveConstructible 和MoveAssignable MoveConstructible Specifies that an instance of the type can be mo ...