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 相关文章推荐
linux下实现定时执行php脚本
Feb 13 PHP
php的闭包(Closure)匿名函数详解
Feb 22 PHP
javascript+php实现根据用户时区显示当地时间的方法
Mar 11 PHP
php为字符串前后添加指定数量字符的方法
May 04 PHP
php轻松实现文件上传功能
Mar 03 PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 PHP
PHP sleep()函数, usleep()函数
Aug 25 PHP
php 7新特性之类型申明详解
Jun 06 PHP
PHP简单验证码功能机制实例详解
Mar 27 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 PHP
PHP实现简单登录界面
Oct 23 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 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 缓存函数代码
2008/08/27 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
WAF的正确bypass
2017/01/05 PHP
thinkPHP5.0框架事务处理操作简单示例
2018/09/07 PHP
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
商务英语专业自荐信
2013/10/14 职场文书
应用化学专业职业生涯规划书
2013/12/31 职场文书
参观考察邀请函范文
2014/01/29 职场文书
毕业班联欢会主持词
2014/03/27 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
离婚案件被告代理词
2015/05/23 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书