高级PHP应用程序漏洞审核技术

PHP 是一种被广泛使用的脚本语言,尤其适合于web开发。具有跨平台,容易学习,功能强大等特点,据统计全世界有超过34%的网站有php的应用,包括 Yahoo、sina、163、sohu等大型门户网站。而且很多具名的web应用系统(包括bbs,blog,wiki,cms等等)都是使用php开 发的,Discuz、phpwind、phpbb、vbb、wordpress、boblog等等。随着web安全的热点升级,php应用程序的代码安全 问题也逐步兴盛起来,越来越多的安全人员投入到这个领域,越来越多的应用程序代码漏洞被披露。针对这样一个状况,很多应用程序的官方都成立了安全部门,或 者雇佣安全人员进行代码审计,因此出现了很多自动化商业化的代码审计工具。也就是这样的形势导致了一个局面:大公司的产品安全系数大大的提高,那些很明显 的漏洞基本灭绝了,那些大家都知道的审计技术都无用武之地了。我们面对很多工具以及大牛扫描过n遍的代码,有很多的安全人员有点悲观,而有的官方安全人员 也非常的放心自己的代码,但是不要忘记了“没有绝对的安全”,我们应该去寻找新的途径挖掘新的漏洞。本文就给介绍了一些非传统的技

查看更多

nginx做过负载均衡后获取真实客户端ip

ha-proxy 服务器做过负载均衡,客户端的数据是从A服务器转发到B服务器,在B服务器用ngx.var.remote_addr获取的是A服务器IP,而不是客户端IP。想获取客户端ip有没有其他办法? #负载均衡服务器添加 location /action{           #proxy_redirect      off;           #保存用户真实信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://adunion_manager; } 在nginx的配置文件中,有诸如下面的日志配置: log_format  main          ‘$remote_addr – [$time_local] “$request” ‘ ‘$status $body_b

查看更多

MySQL备份与恢复的三种方法总结

一.测试环境准备 1.1 mysql的安装就不说了,见 http://www.linuxidc.com/Linux/2012-04/58990.htm 1.2 编缉/etc/my.cnf把二进制日志存放目录改到其它非数据目录,innodb每表一文件 建立一目录用于存放二进制日志 mkdir /mybinlog chown mysql:mysql /mybinlog 修改my.cnf vim /etc/my.cnf log-bin=/mybinlog/mysql-bin ##二进制日志目录及文件名前缀 innodb_file_per_table = 1 ##启用InnoDB表每表一文件,默认所有库使用一个表空间 启动mysqld service mysqld start 1.3 创建一个测试库与测试表 mysql> create database laoguang; mysql> use laoguang; mysql> create table linux (id tinyint auto_increment primary key,name char(10)); m

查看更多

如何调整MySQL查询缓冲

  QueryCache(下面简称QC)是根据SQL语句来cache的。一个SQL查询如果以select开头,那么MySQL服务器将尝试对其使用QC。每个Cache都是以SQL文本作为key来存的。在应用QC之前,SQL文本不会被作任何处理。也就是说,两个SQL语句,只要相差哪怕是一个字 符(例如大小写不一样;多一个空格等),那么这两个SQL将使用不同的一个CACHE。 不过SQL文本有可能会被客户端做一些处理。例如在官方的命令行客户端里,在发送SQL给服务器之前,会做如下处理: 过滤所有注释,去掉SQL文本前后的空格,TAB等字符。注意,是文本前面和后面的。中间的不会被去掉。 下面的三条SQL里,因为SELECT大小写的关系,最后一条和其他两条在QC里肯定是用的不一样的存储位置。而第一条和第二条,区别在于后者有个注释, 在不同客户端,会有不一样的结果。所以,保险起见,请尽量不要使用动态的注释。在PHP的mysql扩展里,SQL的注释是不会被去掉的。也就是三条SQL会被存储在三个不同的缓存里,虽然它们的结果都是一样的。 select * FROM people where name=&

查看更多

十个节省时间的MySQL命令

虽然有许多基于GUI的MySQL客户端存在,如著名的phpMyAdmin和SQLYog,但我一直喜欢原生的MySQL命令行客户端,的确,在未熟悉这些命令行接口(CLI)之前,我们需要花一些时间来熟悉它们,特别是你平时不是经常在具有强大的CLI环境的操作系统下工作时,但只要经过一些练习,你就可以通过CLI管理用户,浏览你的数据库和执行其它任务,其快感是其它人体会不到的。   在这篇文章中,我将会介绍我在工作中积累起来的一些MySQL命令行客户端技巧,不管你尝试其中一个还是所有技巧,我敢保证你一定会节省大量的时间。   顺便提一下,MySQL命令行客户端适应所有操作系统,当然包括Windows,但因为Windows原生CLI环境让人畏惧,因此推荐Windows用户下载并安装Console,它是Windows命令行的一个替代解决方案,提供了更强大的功能,如方便的文本选择,多标签窗口等。   1、登录过程自动化   正确配置的MySQL服务器需要你提供用户名和密码进行身份验证,通常情况下,我们可以直接在mysql命令后加上用户名,出于安全考虑,密码就不跟上了,回车执行时,命令提示符会提醒你输入

查看更多

js操作cookie方法

//js获取cookie /*获取Cookie值*/ function getCookie(c_name) { if(document.cookie.length>0){    c_start=document.cookie.indexOf(c_name + “=”)    if(c_start!=-1){      c_start=c_start + c_name.length+1      c_end=document.cookie.indexOf(“;”,c_start)      if(c_end==-1) c_end=document.cookie.length      return unescape(document.cookie.substring(c_start,c_end))    } } return “” } **********************************//JS操作cookies方法! **************************************

查看更多

js遍历所有dom

//遍历节点 walkDom = function (el){ var c = el.firstChild; var retObj = {}; var array = []; while(c !== null){//这里只是返回了元素节点,没有节点就是个空数组 if(c.nodeType == 1){ array.push(walkDom(c)); } c = c.nextSibling; } retObj[el.tagName] = array; return retObj; }; //构建树形 createTree = function (tree){ var array = []; for(var key in tree){ array.push(‘<li><h3>’); array.push(key.toLowerCase()); array.push(‘</h3>’); if(tree[key].length != 0){ array.push(‘<ul>’

查看更多

php递归删除指定目录及文件

function deldir($path){ if(!is_dir($path)){ return null; } $fh = opendir($path); while(($row = readdir($fh)) !== false){ if($row == ‘.’ || $row == ‘..’){ continue; } if(!is_dir($path.’/’.$row)){ unlink($path.’/’.$row); } deldir($path.’/’.$row); } closedir($fh); if(!rmdir($path)){ echo $path.’无权限删除<br>’; } return true; } deldir(“E:\del”);

查看更多

php中ip获取与处理

ip转化为整数: ip2long(); 转化回来long2ip(); 百度IP接口api: http://developer.baidu.com/map/ip-location-api.htm /* 新浪IP接口 array (size=10) ‘ret’ => int 1 ‘start’ => string ‘106.120.0.0’ (length=11) ‘end’ => string ‘106.121.255.255’ (length=15) ‘country’ => string ‘中国’ (length=6) ‘province’ => string ‘北京’ (length=6) ‘city’ => string ‘北京’ (length=6) ‘district&

查看更多

php小数点处理

$n = “10.6789”; //一、保留2位小数点,并四舍五入 //使用round()方法 echo round($n,2); echo “<br>”; //使用number_format()方法 echo number_format($n,2);echo “<br>”; //使用sprintf()方法 echo sprintf(“%.2f”,$n);echo “<br>”; //二、保留2位小数点,但不四舍五入 echo ((int)($n*100))/100;

查看更多