PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】


Posted in PHP onJuly 21, 2017

本文实例讲述了PHP实现表单提交数据的验证处理功能。分享给大家供大家参考,具体如下:

防XSS攻击代码:

/**
 * 安全过滤函数
 *
 * @param $string
 * @return string
 */
function safe_replace($string) {
 $string = str_replace('%20','',$string);
 $string = str_replace('%27','',$string);
 $string = str_replace('%2527','',$string);
 $string = str_replace('*','',$string);
 $string = str_replace('"','"',$string);
 $string = str_replace("'",'',$string);
 $string = str_replace('"','',$string);
 $string = str_replace(';','',$string);
 $string = str_replace('<','<',$string);
 $string = str_replace('>','>',$string);
 $string = str_replace("{",'',$string);
 $string = str_replace('}','',$string);
 $string = str_replace('\\','',$string);
 return $string;
}

代码实例:

<?php
$user_name = strim($_REQUEST['user_name']);
function strim($str)
{
 //trim() 函数移除字符串两侧的空白字符或其他预定义字符。
 //htmlspecialchars() 函数把预定义的字符转换为 HTML 实体(防xss攻击)。
 //预定义的字符是:
 //& (和号)成为 &
 //" (双引号)成为 "
 //' (单引号)成为 '
 //< (小于)成为 <
 //> (大于)成为 >
 return quotes(htmlspecialchars(trim($str)));
}
//防sql注入
function quotes($content)
{
 //if $content is an array
 if (is_array($content))
 {
  foreach ($content as $key=>$value)
  {
   //$content[$key] = mysql_real_escape_string($value);
   /*addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
   预定义字符是:
   单引号(')
   双引号(")
   反斜杠(\)
   NULL */
   $content[$key] = addslashes($value);
  }
 } else
 {
  //if $content is not an array
  //$content=mysql_real_escape_string($content);
  $content=addslashes($content);
 }
 return $content;
}
?>
//过滤sql注入
function filter_injection(&$request)
{
 $pattern = "/(select[\s])|(insert[\s])|(update[\s])|(delete[\s])|(from[\s])|(where[\s])/i";
 foreach($request as $k=>$v)
 {
    if(preg_match($pattern,$k,$match))
    {
      die("SQL Injection denied!");
    }
    if(is_array($v))
    {
     filter_injection($request[$k]);
    }
    else
    {
     if(preg_match($pattern,$v,$match))
     {
      die("SQL Injection denied!");
     }
    }
 }
}

防sql注入:

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

\x00
\n
\r
'

\x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

语法

mysql_real_escape_string(string,connection)

参数 描述
string 必需。 规定要转义的字符串。
connection 可选。 规定 MySQL 连接。如果未规定,则使用上一个连接。

对于纯数字或数字型字符串的校验可以用

is_numeric()检测变量是否为数字或数字字符串

实例:

<?php 
function get_numeric($val) { 
 if (is_numeric($val)) { 
 return $val + 0; 
 } 
 return 0; 
} 
?>

is_array — 检测变量是否是数组
bool is_array ( mixed $var )
如果 var 是 array,则返回 TRUE,否则返回 FALSE。

is_dir 判断给定文件名是否是一个目录
bool is_dir ( string $filename )
判断给定文件名是否是一个目录。
如果文件名存在,并且是个目录,返回 TRUE,否则返回FALSE。

is_file — 判断给定文件名是否为一个正常的文件
bool is_file ( string $filename )
判断给定文件名是否为一个正常的文件。
如果文件存在且为正常的文件则返回 TRUE,否则返回 FALSE。
Note:
因为 PHP 的整数类型是有符号整型而且很多平台使用 32 位整型,对 2GB 以上的文件,一些文件系统函数可能返回无法预期的结果 。

is_bool — 检测变量是否是布尔型
bool is_bool ( mixed $var )
如果 var 是 boolean 则返回 TRUE。

is_string — 检测变量是否是字符串
bool is_string ( mixed $var )
如果 var 是 string 则返回 TRUE,否则返回 FALSE。

is_int — 检测变量是否是整数
bool is_int ( mixed $var )
如果 var 是 integer 则返回 TRUE,否则返回 FALSE。
Note:
若想测试一个变量是否是数字或数字字符串(如表单输入,它们通常为字符串),必须使用 is_numeric()。

is_float — 检测变量是否是浮点型
bool is_float ( mixed $var )
如果 var 是 float 则返回 TRUE,否则返回 FALSE。
Note:
若想测试一个变量是否是数字或数字字符串(如表单输入,它们通常为字符串),必须使用 is_numeric()。

is_null — 检测变量是否为 NULL
bool is_null ( mixed $var )
如果 var 是 null 则返回 TRUE,否则返回 FALSE。

is_readable — 判断给定文件名是否可读
bool is_readable ( string $filename )
判断给定文件名是否存在并且可读。如果由 filename 指定的文件或目录存在并且可读则返回 TRUE,否则返回 FALSE。

is_writable — 判断给定的文件名是否可写
bool is_writable ( string $filename )
如果文件存在并且可写则返回 TRUE。filename 参数可以是一个允许进行是否可写检查的目录名。

file_exists — 检查文件或目录是否存在
bool file_exists ( string $filename )
检查文件或目录是否存在。
在 Windows 中要用 //computername/share/filename 或者 \computername\share\filename 来检查网络中的共享文件。
如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE。

is_executable — 判断给定文件名是否可执行
bool is_executable ( string $filename )
判断给定文件名是否可执行。如果文件存在且可执行则返回 TRUE,错误时返回FALSE。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
初学CAKEPHP 基础教程
Nov 02 PHP
dedecms系统的广告设置代码 基础版本
Apr 09 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
thinkphp模板赋值与替换实例简述
Nov 24 PHP
php使用Cookie控制访问授权的方法
Jan 21 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
WordPress中缩略图的使用以及相关技巧
Nov 24 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 PHP
php实现基于pdo的事务处理方法示例
Jul 21 #PHP
php基于自定义函数记录log日志方法
Jul 21 #PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 #PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 #PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 #PHP
php检测mysql表是否存在的方法小结
Jul 20 #PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 #PHP
You might like
PHP 验证码不显示只有一个小红叉的解决方法
2013/09/30 PHP
Javascript学习笔记5 类和对象
2010/01/11 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
解决PyCharm中光标变粗的问题
2017/08/05 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
详解Python 协程的详细用法使用和例子
2018/06/15 Python
python实现点对点聊天程序
2018/07/28 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
python实现简单飞行棋
2020/02/06 Python
解决python运行启动报错问题
2020/06/01 Python
详解pandas映射与数据转换
2021/01/22 Python
flask框架中的cookie和session使用
2021/01/31 Python
HTML5 canvas基本绘图之绘制曲线
2016/06/27 HTML / CSS
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
五四青年节演讲稿
2014/05/26 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
初中团委工作总结
2015/08/13 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
详解Python小数据池和代码块缓存机制
2021/04/07 Python
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js