SlideShare une entreprise Scribd logo
1  sur  22
PHP安全分享会 ----PHP相关安全知识介绍 牛祺 2010年12月24日
大纲 PHP安全 ,[object Object]
处理用户输入与输出
PHP变量初始化
PHP变量覆盖
PHP变量类型
PHP文件操作
文件上传
慎用eval
Preg_replace的陷阱
系统命令调用
配置安全的PHP运行环境WEB安全 METHOD OF CRUD SQL 注入 跨站脚本XSS HTTP响应截断攻击
Read 类型操作可以用 GET Create Update Delete 类型操作必须用POST 使用 CSRF(Cross-site request forgery) token 防止跨站请求伪造 本站内部操作限制referer 验证码 METHOD OF CRUD
进行变量类型检查 特殊字符过滤转义 使用存储过程 攻击软件检测&&日志记录 防范SQL 注入
图片地址注入: <imgsrc=“javascript:alert(123)”;> css注入: body{background:url(javascript:alert(123));} 更复杂的注入方式……eval: <imgsrc=“img.jpg”alt=“window.open(‘http://sdo.com’)”> <div id=“mycode” style=“background: url('javascript:eval(document.images[0].alt)')">  跨站脚本XSS
HTTP截断响应攻击 一般通过如下3个条件可以达成这种攻击(前提是服务器没过滤) Set-Cookie 中的内容用户可以控制 302跳转的 Location 地址用户可以控制 其他自定义Header 用户可以控制 一些web应用程序会使用部分用户输入来生成它们的响应头部的某些值,这方面最简单的例子就是重定向,例如: http://www.test.com/index.php?interface=advanced 如果该参数interface的值是advanced,那么应用程序将响应下列内容: HTTP/1.1 302 Moved Temporarily 	….. Location:http://www.test.com/main.php?interface=advanced
HTTP截断响应攻击 在参数interface中插入序列%0d%0a() ,攻击者将能够触发一个响应,任何解析器(例如介于用户和Web应用之间的web缓存)都会把这个响应会被解释为两个不同的响应。所以,攻击者就可以通过给这个web缓存“投毒”以使它为后续的请求中提供虚假的内容,例: 	http://www.test.com/index.php? interface=advanced%0D%0A%0D%0AHTTP/1.1%20200%20OK%0D%0A%0D%0AContent-Type%3atext%2fhtml%0D%0A%Content-Length%3a35%0D%0A%%0D%0A%<html>system down </html> 这样用户在重定向之后将收到一个200的相应,内容为system down 当然附加更多的脚本甚至max-age控制缓存时间也毫无问题 PHP的header()函数会对内容检测,遇到多行时会报错提示
PHP LIFE CIRCLE 随请求到来而生,请求结束则灭,资源全部销毁回收。 最长执行时间限制,CGI默认max_execution_time = 60 若非使用常驻系统的方式运行,很难出现内存泄露。
处理用户输入输出 输入数据处理 addslashes() stripslashes()  //请成对使用 Htmlspecialchars()   // 转义 $ ‘ “ <  > magic_quotes_gpc// PHP 5.3不建议使用 magic_quotes_runtime  // PHP 5.3不建议使用 mysql_real_escape_string  //插入数据库前进行转义 PHP用户可控制的所有目标变量 完全控制:$_GET、$_POST、$_COOKIE    半控制:$_FILES、$_SERVER、$_SESSION
PHP变量初始化 PHP变量不初始化也可以使用,但是…… 会报错,特别是当未初始化的变量出现在foreach语句中,应该初始化为array()。用@可以抑制错误信息,但这不能解决根本问题,反而会让程序跑得很慢。 初始化变量是个良好的习惯^_^ 方便又危险的register_globals Php.ini中Register_globals设置为On时 将会把 $_GET, $_POST, $_COOKIE , $_SESSION直接转化为变量。也就是说$_GET[‘HELLO’]就可以通过$HELLO直接调用。
PHP变量覆盖 PHP变量覆盖 foreach($_GET as $key  => $value )   		  ${$key} = $value 提交 http://127.0.0.1/secure/qoutekey.php?<script>alert(1);</script>=1 结果: 	array '<script>alert(1);</script>' => string '1' (length=1) ,[object Object],$arr = $_REQUEST[‘arr’];    var_dump( $_REQUEST);parse_str($arr ); 提交http://127.0.0.1/secure/qoutekey.php?arr=_REQUEST%3dhacked            结果: string ‘hacked’ (length=6) $_REQUEST被覆盖了
PHP变量覆盖 Extract()作用:展开数组中的键值对到符号表 函数声明: int extract ( array $var_array [, int $extract_type = EXTR_OVERWRITE [, string $prefix ]] ) $var_array为需要被展开的数组, $extract_type为展开模式(默认为覆盖模式EXTR_OVERWRITE), $prefix为前缀(个别模式下不能为空或者数字类型) 常见用法:  $array=Array(‘var’=> ‘2’, ’foo’=>’hoho’); 	Extract($array); 	echo $var; 	 //    2   	echo $foo;	 // ‘hoho’ 危险所在 如果被extract的数组中出现了可以被用户控制键值对……

Contenu connexe

En vedette

Facebookページ資料0316
Facebookページ資料0316Facebookページ資料0316
Facebookページ資料0316Junji Kumagai
 
Sourcing – Beyond Basics
Sourcing – Beyond BasicsSourcing – Beyond Basics
Sourcing – Beyond BasicsKristen Fife
 
Dealing With Difference Personalities
Dealing With Difference PersonalitiesDealing With Difference Personalities
Dealing With Difference PersonalitiesHasan Al Jaberi
 
Making The SCA Work For You
Making The SCA Work For YouMaking The SCA Work For You
Making The SCA Work For YouKristen Fife
 
بروفايل المروى الدعائي
بروفايل المروى الدعائيبروفايل المروى الدعائي
بروفايل المروى الدعائيKhalil Amr
 
JayaDigital agency Facebook marketing presentation
JayaDigital agency Facebook marketing presentationJayaDigital agency Facebook marketing presentation
JayaDigital agency Facebook marketing presentationJayaDigital
 
Event Management Made Easy with Evenesis
Event Management Made Easy with EvenesisEvent Management Made Easy with Evenesis
Event Management Made Easy with EvenesisYusno Yunos
 
Evenesis EURO Slides
Evenesis EURO SlidesEvenesis EURO Slides
Evenesis EURO SlidesYusno Yunos
 
Tutoriel plate-forme Unow
Tutoriel plate-forme UnowTutoriel plate-forme Unow
Tutoriel plate-forme UnowBich Van Hoang
 
China Not Ready to be a SuperPower
China Not Ready to be a SuperPowerChina Not Ready to be a SuperPower
China Not Ready to be a SuperPowerHasan Al Jaberi
 
Nasscom EmergeOut Conclave, Jan 28, 2011
Nasscom EmergeOut Conclave, Jan 28, 2011Nasscom EmergeOut Conclave, Jan 28, 2011
Nasscom EmergeOut Conclave, Jan 28, 2011NasscomEmergeOut
 

En vedette (13)

Facebookページ資料0316
Facebookページ資料0316Facebookページ資料0316
Facebookページ資料0316
 
Sourcing – Beyond Basics
Sourcing – Beyond BasicsSourcing – Beyond Basics
Sourcing – Beyond Basics
 
Dealing With Difference Personalities
Dealing With Difference PersonalitiesDealing With Difference Personalities
Dealing With Difference Personalities
 
Making The SCA Work For You
Making The SCA Work For YouMaking The SCA Work For You
Making The SCA Work For You
 
بروفايل المروى الدعائي
بروفايل المروى الدعائيبروفايل المروى الدعائي
بروفايل المروى الدعائي
 
JayaDigital agency Facebook marketing presentation
JayaDigital agency Facebook marketing presentationJayaDigital agency Facebook marketing presentation
JayaDigital agency Facebook marketing presentation
 
Tutoriel OverBlog
Tutoriel OverBlogTutoriel OverBlog
Tutoriel OverBlog
 
Event Management Made Easy with Evenesis
Event Management Made Easy with EvenesisEvent Management Made Easy with Evenesis
Event Management Made Easy with Evenesis
 
Evenesis EURO Slides
Evenesis EURO SlidesEvenesis EURO Slides
Evenesis EURO Slides
 
Tutoriel plate-forme Unow
Tutoriel plate-forme UnowTutoriel plate-forme Unow
Tutoriel plate-forme Unow
 
China Not Ready to be a SuperPower
China Not Ready to be a SuperPowerChina Not Ready to be a SuperPower
China Not Ready to be a SuperPower
 
20010
2001020010
20010
 
Nasscom EmergeOut Conclave, Jan 28, 2011
Nasscom EmergeOut Conclave, Jan 28, 2011Nasscom EmergeOut Conclave, Jan 28, 2011
Nasscom EmergeOut Conclave, Jan 28, 2011
 

Php安全分享会