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 相关文章推荐
弄了个检测传输的参数是否为数字的Function
Dec 06 PHP
PHP 变量类型的强制转换
Oct 23 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
Jul 01 PHP
javascript some()函数用法详解
Nov 13 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
PHP实现微信商户支付企业付款到零钱功能
Sep 30 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
PHP反射基础知识回顾
Sep 10 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 中文乱码解决办法总结分析
2009/07/30 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
javascript 拖动表格行实现代码
2011/05/05 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
django创建自定义模板处理器的实例详解
2017/08/14 Python
简单了解python反射机制的一些知识
2019/07/13 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
python中property和setter装饰器用法
2019/12/19 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
求职自荐信范文格式
2013/11/29 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
客房领班岗位职责
2015/02/11 职场文书
公司周年庆典致辞
2015/07/30 职场文书
Moment的feature导致线上bug解决分析
2022/09/23 Javascript