醉山 2011-6-16
写在最前面,网络安全是现今最热门的话题之一。各大IT 和互联网公司在五花八门的网络入侵,渗透,攻击面前, 纷纷落马。早的有2010年百度 DNS劫持事件,近的有索 尼“黑客门”事件。前者让百度直接损失了近700万,李 彦宏先生直呼“前所未有啊,前所未有啊”,而后者到目 前为止,已经让SONY损失掉1.71亿美金。 这些天最火的安全新闻应该是超过200,000名花旗银行客 户资料被黑客盗窃事件。黑客们仅仅是简单地登录花旗公 司的信用卡客户专区,然后把浏览器地址栏中自己的帐号 替换成他人的帐号,便可顺利进入他人的帐号。随后黑客 们使用计算机程序重复这一过程……
我们是淘宝网: ? 电子商务的领军企业…… ? 电子商务生态链缔造者…… ? IT知名企业…… ? …… ? 正因为以上各种光环,各种各样怀着各种目的的人一直在 不断的在挑战我们。
我们经常被挑战!
时间:2010年。 事件:公司某服务器被入侵。 过程:利用PHP解析条件上的配 置失误,入侵者上传的txt后门 被服务器错误的当作本地程序执 行。同时由于PHP本身配置上的 错误,入侵者轻易的拿到了 shell执行权限。入侵者使用自 己编译过后的Apache替换了线 上运行的Apache。直到四个月 后才因为一次线上异常被监控团 队发现。
时间:2010年。 事件:公司某服务器入侵风险。 过程:该服务器上应用以GET的 方式从URL参数中获取了部分参 数,拼接后的字符串直接放置在 exec函数里调用shell操作。只需 要通过简单的命令构造就能完成 入侵行为。技术安全团队渗透测 试很轻易的就拿到了服务器上帐 号文件的内容。
为什么要举这样两个事例? 出现上述两个情况最主要的原因是什么?
PHP的安全: 一方面也取决于PHP相关配置的安全性。 比如刚才事例一中的上传的后门文件被错误的当成PHP文 件被解析。 另外一方面取决于PHP代码本身编写的安全性。 比如刚才事例二中的使用外部获取的参数来调用shell导致 的shell injection漏洞。
从安全的角度上来说,前端环境中有下列动作都认为是危 险的: 1)远程(外部)include。 2)文件相关操作。 3)shell操作。 etc…. 安全问题,离我们并不遥远,也不都是技术含量很高的活。 大事件往往都是由小问题引发的。
;...; 其作用相当于
容器,将内部指令的对象指定为起 始标签的文件,但它将表达式(regex)作为文件的变量 而不是文件名。 我们应该这么做…… AddType application/x-httpd-php .php
安全模式必须要开启: safe_mode = on safe_mode_gid = off safe_mode_include_dir = [WEBSITE] saf
e_mode_exec_dir = safe_mode_allowed_env_vars = PHP_
启动safe_mode,会对许多PHP函数进行限制,特别是和系统相关的文件打 开、命令执行等函数 Safe_mode 是唯一PHP_INI_SYSTEM属性,要启动safe_mode,必须配置 php.ini。 Safe_mode_gid 文件相关权限比较。关闭只比较UID,打开则扩展到GID Safe_mode_exec_dir 允许命令执行函数的路径。 safe_mode_allowed_env_vars = PHP_ 只能设置以PHP_开头的环境变量
必须要禁用的函数: disable_functions=exec,passthru,popen,proc_open,s hell_exec,system,phpinfo, assert 建议禁用的函数: disable_functions=chdir,chroot,dir,getcwd,opendir,re addir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,re name,file,file_get_contents,fputs,fwrite,chgrp,chmod, chown
关闭错误信息提示: display_errors = Off 关闭远程文件打开/包含: allow_url_fopen = Off allow_url_include = Off http only 开启 session.cookie_httponly = 1 https secure 开启 session.cookie_secure = 1
Safe_mode下的include默认目录为当前的website路径。 从PHP 4.2.0开始,该指令可以接受和 include_path指令 类似的风格用冒号(Windows 中是分号)隔开的路径, 而不只是一个目录。指定的限制实际上是一个前缀,而非 一个目录名。这也就是说“safe_mode_include_dir = /dir/incl”将允许访问“/dir/include”和“/dir/incls”, 如果它们存在的话。如果希望将访问控制在一个指定的目 录,那么请在结尾加上一个斜线。 所有的参数修改,需要重启apache后生效。
PHP 5.2.0版本以后推出了filter扩展,是一个针对标准 PHP的数据验证和过滤模块。 在php.ini文件中 [filter] filter.default = special_chars 为输入输出过滤(filter)扩展的相关配置。
PHP Filter扩展也是技术安全团队推荐使用的安全相关扩 展。 未对用户的输入进行安全处理是造成各种安全漏洞的根本 原因。合理的使用PHP Filter能够一定程度的降低安全漏 洞出现的几率。
1,XSS安全漏洞 2,CSRF安全漏洞 3,SQL injection安全漏洞 4,Open Redirect安全漏洞 5,Shell injection安全漏洞 6,文件上传漏洞
XSS也叫CSS(Cross Site Script),跨站点脚本代码执 行漏洞。 成因:用户输入的内容被当作客户端脚本执行,篡改了页 面逻辑结构。 风险:根据类型的不同,风险级别各有不同,常见的利用 手段有: 盗窃帐号,挂马,欺诈钓鱼等等。
输出到html标签里:
”/> 要点: 1)代码要执行需要有解析环境。我们要做的就是防止构造环境。 htmlspecialchars($str,ENT_QUOTES),将< >‘ “进行html编码。防止出现script 环境。 2)特别需要注意一些支持伪协议的标签,比如src等等。例如 src=javascript:code 3)特别需要注意CSS标签,比如style标签等等。
输出到javascript里面:
要点: 1)输出的内容必须放在变量中,并用单引号引起来。 2)一些特殊情况不能使用htmlspecialchars,需要做最基本的转义‘->\’和/->\/
使用PHP filter的情况:
filter_input[INPUT_GET,‘string’, FILTER_SANITIZE_SPECIAL_CHARS]; 等同于htmlspecialchars PHP filter还提供了多种flag以应对不同的过滤需要。
准确的说法:这次攻击是蠕虫攻击。 1、利用了新浪微博存在的XSS漏洞,写入了攻击代码; 2、使用有道提供的短域名服务,以此增加迷惑性和伪装性; 3、利用存在的CSRF漏洞; 新浪微博用户点击到相关网页时,行插入的js脚本做这几件 事情: a.发微博,b.加关注,c.发私信, 让更多的人看到这些消息,自然也就有更多人受害
通过伪装来自受信任用户的请求来利用受信任的网站。 标准解决实现方式: 第一次请求页面时,服务器issue cookie并在页面中带上 一个hidden项,cookie的值和hidden项的值相同。 该值通过session cookie+服务器端私钥做md5生成,取 生成的md5值作为验证依据。 服务器端必须做验证 ,生成和验证都需要由服务器端完 成。
通过构造特定的输入从数据库获得未经授权的访问和直接 检索。 标准的处理方式: ? PHP4提供了函数mysql_real_escape_string来做转义 处理。 ? PHP5请使用PDO方式来进行绑定。
try{ $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); $sql = "SELECT * FROM students WHERE id=?"; $stmt = $dbh->prepare($sql); $stmt->bindParam(1, $id); $stmt->execute(); while ($row = $stmt->fetch()) { print_r($row); } } catch (PDOException $e) { echo $e->getMessage(); die(); }
通过URL被篡改,从当前网站跳转到欺诈网站。 严格检查跳转地址域名,默认只允许阿里巴巴域下跳转。 ^https?:// ([/w]+\.)*taobao\(/.*)*$
通过恶意输入影响服务器上的shell执行。 禁止使用exec,system,passthru,shell_exec等PHP直接操 作shell的命令。这些危险的函数也被
上一篇:php安全控制防止外部提交_php代码
下一篇:加强公路工程施工技术管理工作的措施