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和ACCESS写聊天室(四)
Oct 09 PHP
使用apache模块rewrite_module (转)
Feb 14 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
May 27 PHP
强制PHP命令行脚本单进程运行的方法
Apr 15 PHP
php中动态修改ini配置
Oct 14 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
php中current、next与reset函数用法实例
Nov 17 PHP
PHP可变变量学习小结
Nov 29 PHP
PHP生成图像验证码的方法小结(2种方法)
Jul 18 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
Oct 03 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 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
德劲1103的维修打理经验
2021/03/02 无线电
php 服务器调试 Zend Debugger 的安装教程
2009/09/25 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
php实现源代码加密的方法
2015/07/11 PHP
php实现的递归提成方案实例
2015/11/14 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
python执行等待程序直到第二天零点的方法
2015/04/23 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
python继承threading.Thread实现有返回值的子类实例
2020/05/02 Python
24个canvas基础知识小结
2014/12/17 HTML / CSS
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
前台文员职责范本
2014/03/07 职场文书
酒店节能降耗方案
2014/05/08 职场文书
酒店管理求职信
2014/06/09 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
党员承诺书格式范文
2015/04/28 职场文书
2016年世界艾滋病日宣传活动总结
2016/04/01 职场文书
商业计划书格式、范文
2019/03/21 职场文书
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android