0

0

php 安全过滤

php中文网

php中文网

发布时间:2016-06-13 08:54:25

|

1207人浏览过

|

来源于php中文网

原创

php 安全过滤

/*ansic码-url码表: http://www.w3school.com.cn/tags/html_ref_urlencode.html

-----------------------------------------------------------------------------------------------------------------

1、验证过滤用户的输入

即使是最普通的字母数字输入也可能是危险的,列举几个容易引起安全问题的字符:

!$ ^ & * ( ) ~ [ ] \ | { } ' " ; ? - `

立即学习PHP免费学习笔记(深入)”;

在数据库中可能有特殊意义的字符:

'" ; \

还有一些非打印字符:

字符\x00或者说ASCII 0,NULL或FALSE

字符\x10和\x13,或者说ASCII 10和13,\n \r

字符\x1a或者说ASCII 26,表示文件的结束

输入错误的参数类型,也可能导致程序出现意想不到的错误。

输入过多的参数值,可能导致溢出等错误。

2、对于文件的路径与名称的过滤

文件名中不能包含二进制数据,否则可能引起问题。

一些系统允许Unicode多字节编码的文件名,但是尽量避免,应当使用ASCII的字符。

虽然Unix系统几乎可以在文件名设定中使用任何符号,但是应当尽量使用 - 和 _ 避免使用其他字符。

同时需要限定文件名的长度。

3、防止SQL注入

检查用户输入的类型,当用户输入的为数字时可以使用如下方式:

使用is_int()函数(或is_integer()或is_long()函数)

使用gettype()函数

使用intval()函数

使用settype()函数

检查用户输入字符串的长度使用strlen()函数。

检查日期或时间是否是有效的,可以使用strtotime()函数

4、防止XSS攻击

xss攻击一个常用的方法就是注入HTML元素执行js脚本,php中已经内置了一些防御的函数(如htmlentities或者htmlspecialchars)

5、过滤用户提交的URL

如果允许用户输入一个URL用来调用一个图片或者链接,你需要保证他不传入javascript:或者vbscript:或data:等非http协议。

可以使用php的内置函数parse_url()函数来分割URL,然后做判断。

6、防止远程执行--下表列出了跟Shell相关的一些字符:

远程执行通常是使用了php代码执行如eval()函数,或者是调用了命令执行如exec(),passthru(),proc_open(),shell_exec(),system()或popen()。

注入php代码:php为开发者提供了非常多的方法可以来调用允许php脚本,我们就需要注意对用户可控的数据进行过滤。

7、Shell命令执行

PHP提供了一些可以直接执行系统命令的函数,如exec()函数或者 `(反引号)。

PHP的安全模式会提供一些保护,但是也有一些方式可以绕过安全模式:

1、上传一个Perl脚本,或者Python或Ruby等,服务器支持的环境,来执行其他语言的脚本可绕过PHP的安全模式。

2、利用系统的缓冲溢出漏洞,绕过安全模式。

跟Shell相关的一些字符:

名称 字符 ASCII 16进制 URL编码 HTML编码

换行 10 \x0a %0a

感叹号 ! 33 \x21 %21 !

双引号 " 34 \x22 %22 "或"

美元符号 $ 36 \x24 %24 $

连接符 & 38 \x26 %26 &或amp

单引号 ' 39 \x27 %27 '

左括号 ( 40 \x28 %28 (

右括号 ) 41 \x29 %29 )

星号 * 42 \x2a %2a *

连字符号 - 45 \x2d %2d -

分号 ; 59 \x3b %3b ;

左尖括号

右尖括号 > 62 \x3e %3e >

问号 ? 63 \x3f %3f ?

左方括号 [ 91 \x5b %5b [

反斜线 \ 92 \x5c %5c \

右方括号 ] 93 \x5d %5d ]

插入符 ^ 94 \x5e %5e ^

反引号 ` 96 \x60 %60 `

左花括号 { 123 \x7b %7b {

管道符 | 124124 \x7c %7c 𞓜

右花括号 } 125 \x7d %7d }

波浪号 ~ 126 \x7e %7e ~

-----------------------------------------------------------------------------------------------------------------

安全过滤函数代码*/

/**

佳弗O2O系统
佳弗O2O系统

佳弗O2O网站系统——乐活版 环境需求 1. 可用的 www 服务器,如 Apache、Zeus、IIS 等 2. php 4.3.0 及以上 3. Zend Optimizer 2.5.7 及以上 4. MySQL 3.23 及以上,仅针对 MySQL 版 安装 1.安装按照提示流程一步一步安装 2.安装过后如果出现错误,请删除 ./Runtime文件夹 3.如果打开首页 点击导航 出现4

下载

* 安全过滤输入[jb]

*/

function check_str($string, $isurl = false)

{

$string= preg_replace('/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/','',$string); //去掉控制字符

$string= str_replace(array("\0","%00","\r"),'',$string);//\0表示ASCII 0x00的字符,通常作为字符串结束标志;这三个都是可能有害字符

empty($isurl)&& $string =preg_replace("/&(?!(#[0-9]+|[a-z]+);)/si",'&',$string);//HTML里面可以用xx;来对一些字符进行编码,比如 (空格), ? Unicode字符等,A(?!B) 表示的是A后面不是B,所以作者想保留 ?类似的 HTML编码字符,去掉其他的问题字符

$string= str_replace(array("%3C",'

$string= str_replace(array("%3E",'>'),'>',$string);

$string= str_replace(array('"',"'","\t",' '),array('“','‘','',' '),$string);

returntrim($string);

}

/**

* 安全过滤类-过滤javascript,css,iframes,object等不安全参数 过滤级别高

* @param string $value 需要过滤的值

* @return string

*/

function fliter_script($value) {

$value=preg_replace("/(javascript:)?on(click|load|key|mouse|error|abort|move|unload|change|dblclick|move|reset|resize|submit)/i","&111n\\2",$value);

$value= preg_replace("/(.*?)/si","",$value);

$value= preg_replace("/(.*?)/si","",$value);

$value= preg_replace ("//iesU", '', $value);

return$value;

}

/**

* 安全过滤类-过滤HTML标签

* @param string $value 需要过滤的值

* @return string

*/

function fliter_html($value) {

if(function_exists('htmlspecialchars')) return htmlspecialchars($value);

returnstr_replace(array("&", '"', "'", ""), array("&", "\"", "'",""), $value);

}

/**

* 安全过滤类-对进入的数据加下划线 防止SQL注入

* @param string $value 需要过滤的值

* @return string

*/

function fliter_sql($value) {

$sql= array("select", 'insert', "update", "delete","\'", "\/\*","\.\.\/", "\.\/","union", "into", "load_file","outfile");

$sql_re=array("","","","","","","","","","","","");

returnstr_replace($sql, $sql_re, $value);

}

/**

* 安全过滤类-通用数据过滤

* @param string $value 需要过滤的变量

* @return string|array

*/

function fliter_escape($value) {

if(is_array($value)) {

foreach($value as $k => $v) {

$value[$k]= self::fliter_str($v);

}

}else {

$value= self::fliter_str($value);

}

return$value;

}

/**

* 安全过滤类-字符串过滤 过滤特殊有危害字符

* @param string $value 需要过滤的值

* @return string

*/

function fliter_str($value) {

$badstr= array("\0", "%00", "\r", '&', ' ','"', "'", "", " ", "%3C", "%3E");

$newstr= array('', '', '', '&', ' ', '"', ''', "", " ","");

$value = str_replace($badstr, $newstr, $value);

$value =preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $value);

return$value;

}

/**

* 私有路劲安全转化

* @param string $fileName

* @return string

*/

function filter_dir($fileName) {

$tmpname= strtolower($fileName);

$temp= array(':/',"\0", "..");

if(str_replace($temp, '', $tmpname) !== $tmpname) {

returnfalse;

}

return$fileName;

}

/**

* 过滤目录

* @param string $path

* @return array

*/

public function filter_path($path) {

$path= str_replace(array("'",'#','=','`','$','%','&',';'), '', $path);

returnrtrim(preg_replace('/(\/){2,}|(\\\){1,}/', '/', $path), '/');

}

/**

* 过滤PHP标签

* @param string $string

* @return string

*/

public function filter_phptag($string) {

returnstr_replace(array(''), array('', '?>'), $string);

}

/**

* 安全过滤类-返回函数

* @param string $value 需要过滤的值

* @return string

*/

public function str_out($value) {

$badstr= array("", "%3C", "%3E");

$newstr= array("", "");

$value = str_replace($newstr, $badstr, $value);

returnstripslashes($value); //下划线

}

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

115

2025.12.24

拼豆图纸在线生成器
拼豆图纸在线生成器

拼豆图纸生成器有PixelBeads在线版、BeadGen和“豆图快转”;推荐通过pixelbeads.online或搜索“beadgen free online”直达官网,避开需注册的诱导页面。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

82

2025.12.24

俄罗斯搜索引擎yandex官方入口地址(最新版)
俄罗斯搜索引擎yandex官方入口地址(最新版)

Yandex官方入口网址是https://yandex.com。用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

546

2025.12.24

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

150

2025.12.24

php框架基础知识汇总
php框架基础知识汇总

php框架是构建web应用程序的架构,提供工具和功能,以简化开发过程。选择合适的框架取决于项目需求和技能水平。实战案例展示了使用laravel构建博客的步骤,包括安装、创建模型、定义路由、编写控制器和呈现视图。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

20

2025.12.24

Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

47

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

7

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

12

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

371

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 9.5万人学习

Java 教程
Java 教程

共578课时 | 37.4万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 6.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号