php过滤提交数据 防止sql注入***(8)
现在还剩下什么问题呢?远程表单提交。
远程表单提交
Web 的好处是可以分享信息和服务。坏处也是可以分享信息和服务,因为有些人做事毫无顾忌。
以 表单为例。任何人都能够访问一个 Web 站点,并使用浏览器上的 File > Save As 建立表单的本地副本。然后,他可以修改 action 参数来指向一个完全限定的 URL(不指向 formHandler.php,而是指向 http://www.yoursite.com/formHandler.php,因为表单在这个站点上),做他希望的任何修改,点击 Submit,服务器会把这个表单数据作为合法通信流接收。
首先可能考虑检查 $_SERVER[’HTTP_REFERER’],从而判断请求是否来自自己的服务器,这种方法可以挡住大多数恶意用户,但是挡不住最高明的***。这些人足够聪明,能够篡改头部中的引用者信息,使表单的远程副本看起来像是从您的服务器提交的。
处理远程表单提交更好的方式是,根据一个惟一的字符串或时间戳生成一个令牌,并将这个令牌放在会话变量和表单中。提交表单之后,检查两个令牌是否匹配。如果不匹配,就知道有人试图从表单的远程副本发送数据。
要创建随机的令牌,可以使用 PHP 内置的 md5()、uniqid() 和 rand() 函数,如下所示:
清单 18. 防御远程表单提交
session_start();
if ($_POST[’submit’] == “go”){
//check token
if ($_POST[’token’] == $_SESSION[’token’]){
//strip_tags
$name = strip_tags($_POST[’name’]);
$name = substr($name,0,40);
//clean out any potential hexadecimal characters
$name = cleanHex($name);
//continue processing….
}else{
//stop all processing! remote form posting attempt!
}
}
$token = md5(uniqid(rand(), true));
$_SESSION[’token’]= $token;
function cleanHex($input){
$clean = preg_replace(”![\][xX]([A-Fa-f0-9]{1,3})!”, “”,$input);
return $clean;
}
?>
” method=”post”>
Name
”/>
这种技术是有效的,这是因为在 PHP 中会话数据无法在服务器之间迁移。即使有人获得了您的 PHP 源代码,将它转移到自己的服务器上,并向您的服务器提交信息,您的服务器接收的也只是空的或畸形的会话令牌和原来提供的表单令牌。它们不匹配,远程表单提交就失败了。
转载于:https://blog.51cto.com/tommike/1190489
php过滤提交数据 防止sql注入***(8)相关推荐
- php过滤提交数据 防止sql注入攻击
php过滤提交数据 防止sql注入攻击 在SQL注入攻击 中,用户通过操纵表单或 GET 查询字符串,将信息添加到数据库查询中.例如,假设有一个简单的登录数据库.这个数据库中的每个记录都有一个用户名字 ...
- php sql语句过滤,PHP过滤用户提交信息(防SQL注入)
请求层面的过滤 在 request 层面 我们可能要做的是如何防止非法html 的标签的提交, 例如 SQL层面的控制 –什么是SQL注入 如果用户传入的参数 需要用于构造sql 语句的话 那么我们就 ...
- php mysql防注入字符串过滤_php中防止SQL注入的方法
最好对magic_quotes_gpc已经开放的情况下,还是对$_POST['lastname']进行检查一下. 再说下mysql_real_escape_string和mysql_escape_st ...
- mysql-查询演练-商城查询-数据修改-sql注入及防范
目标 通过python来操作数据库 写一个类,封装常用的一些方法 架构 >基本架构 >提示用户,并提供分支处理函数 查询功能 >查询所有商品的方法 >缺什么就补什么 >查 ...
- 网络安全篇(数据表单的创建 SQL命令拾遗 数据的SQL注入的防护)
SQL注入五孔不入,尽管是老技术了,但是依然是重点防护的手段,更多的需要我们数据库开发者细心!! 数据表的演练 1 创建数据表 create database jing_dong charset=ut ...
- 【Web安全】绕过WAF过滤-利用cookie进行SQL注入
文章目录 1 靶场分析 1.1 找到可能与数据库交互的模块 1.2 尝试注入 2 GET,POST传值 3 ModHeader绕WAF 1 靶场分析 1.1 找到可能与数据库交互的模块 HERE 进入 ...
- java filter注入_如何使用Filter过滤请求中的SQL注入攻击
在doFilter方法中编写判断逻辑 public void doFilter(ServletRequest request, ServletResponse response, FilterChai ...
- 24、SQL注入是什么,如何避免SQL注入?
SQL 注入(SQL Injection)是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞.主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用 ...
- 【CyberSecurityLearning 55】SQL注入
目录 SQL 简介 SQL注入基础 漏洞原理 漏洞危害 分类 MYSQL相关 @注释 @mysql 元数据数据库information_schema @ mysql常用的函数与参数(★) @逻辑运算 ...
最新文章
- 将Bean放入Spring容器中的五种方式
- 值得深思的问题——分库分表就能无限扩容吗?
- InteractiveGraph 实现酷炫关系图谱之前瞻
- Mac下获取AppStore安装包文件路径
- Windows Phone开发(4):框架和页
- python实现文本编辑器_Python-tkinter实现简单的文本编辑器
- 第 5-2 课:线程池——ThreadPoolExecutor + 面试题
- React中受控组件和非受控组件
- C++基础——有关FILE的那些函数
- 那些一毕业就选择华为的人,后来都怎么样了
- 如何使用Visio 2007制作流程图
- android 自定义数字软键盘,(笔记)Android自定义数字键盘
- FreeSurfer数据质量指标:欧拉数Euler Number
- 在计算机网络中ftp服务器的用途是,FTP的作用以及传输文件的一般步骤
- 12-16 云计算平台基础架构
- kal渗透----缓冲区溢出个人笔记
- iOS_实现类似蒲公英、fir等发包平台 通过URL分发内测APP
- PR模板如何使用?Premiere模板如何替换图片、视频及文字的PR模板使用教程
- docker是干什么的,docker常用命令每日一练
- 百度IFE前端学院-DAY1-Web开发概览
热门文章
- VTK:几何对象之LongLine
- OpenCV坎尼探测器Canny Detector的实例(附完整代码)
- OpenCV检测面部特征点的实例(附完整代码)
- Qt第三方Android库
- Qt Creator支持平台
- OpenGL 高级GLSL(Advanced GLSL)
- C++shell sort希尔排序的实现算法之一(附完整源码)
- C++中 static 关键字的作用
- android窗口速度条,android 改变ViewPager切换页面时的速度
- python关键字列表的表达式,python 列表推导和生成器表达式的使用