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 相关文章推荐
PHP使用者状态管理功能的应用
Oct 09 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
PHP延迟静态绑定示例分享
Jun 22 PHP
兼容PHP和Java的des加密解密代码分享
Jun 26 PHP
Java中final关键字详解
Aug 10 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
PHP封装函数实现生成随机的字符串验证码
Jan 24 PHP
万能的php分页类
Jul 06 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
Aug 05 PHP
Laravel如何同时连接多个数据库详解
Aug 13 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 PHP
PHP执行普通shell命令流程解析
Aug 24 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删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
php中explode函数用法分析
2014/11/15 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
jquery根据name属性查找的小例子
2013/11/21 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
python多线程扫描端口示例
2014/01/16 Python
Python实现删除Android工程中的冗余字符串
2015/01/19 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
django反向解析和正向解析的方式
2018/06/05 Python
用python解压分析jar包实例
2020/01/16 Python
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
2014道德模范事迹材料
2014/02/16 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
运动会1000米加油稿
2015/07/21 职场文书
医院保洁员管理制度
2015/08/05 职场文书
汶川大地震感悟
2015/08/10 职场文书
mysql幻读详解实例以及解决办法
2022/06/16 MySQL