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 存储文本换行实现方法
Jan 05 PHP
ThinkPHP与PHPExcel冲突解决方法
Aug 08 PHP
PHP中使用imagick实现把PDF转成图片
Jan 26 PHP
php实现简易聊天室应用代码
Sep 23 PHP
php pthreads多线程的安装与使用
Jan 19 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
Yii2中如何使用modal弹窗(基本使用)
May 30 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
Thinkphp开发--集成极光推送
Sep 15 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
mac pecl 安装php7.1扩展教程
Oct 17 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
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
jQuery代码优化 遍历篇
2011/11/01 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
通过Python实现自动填写调查问卷
2017/09/06 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
纽约海:Sea New York
2018/11/04 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
仓库理货员岗位职责
2013/12/18 职场文书
中学生班主任评语
2014/01/30 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
领导班子在批评与自我批评座谈会上的发言
2014/09/28 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server