俗可耐

俗的耐人寻味


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 搜索

PHP获取匿名函数的方法体

发表于 2016-06-18 | 分类于 PHP

通过反射,获取匿名函数的方法体,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function closure_code(Closure $c) {
$r = new ReflectionFunction($c);
$lines = file($r->getFileName());
$firstLine = $lines[$r->getStartLine() - 1];
// 根据'function'的位置,获取函数开始的位置
$firstLine = substr($firstLine, strpos($firstLine, "function"));
$body = implode("", array_slice($lines, $r->getStartLine(), $r->getEndLine() - $r->getStartLine()));
$result = $firstLine . $body;

$lastLine = $lines[$r->getEndLine() - 1];
preg_match_all("/^( +)/", $lastLine, $blank);
// 根据最后一行的缩进(如果有),进行简单的格式化
if (isset($blank[0][0])) {
$prefixBlank = $blank[0][0];
$result = str_replace("\n{$prefixBlank}", "\n", $result);
}
return $result;
}

阅读全文 »

PHP中的XSS攻击

发表于 2016-06-18 | 分类于 PHP

PHP检测是否内网ip

发表于 2016-06-13 | 分类于 PHP
  • 使用PHP自带filter_var函数
1
2
3
4
5
6
7
8
if (filter_var(
$_SERVER['REMOTE_ADDR'],
FILTER_VALIDATE_IP,
FILTER_FLAG_NO_PRIV_RANGE|FILTER_FLAG_NO_RES_RANGE
)) {
header('HTTP/1.0 403 Forbidden');
die('禁止外网访问');
}
  • 根据内网ip段的范围检测ip2long的值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function ip_is_private($ip){
$pri_addrs = array(
'10.0.0.0|10.255.255.255',
'172.16.0.0|172.31.255.255',
192.168.0.0|192.168.255.255',
'169.254.0.0|169.254.255.255',
'127.0.0.0|127.255.255.255'
);
$long_ip = ip2long($ip);
if($long_ip != -1) {
foreach($pri_addrs AS $pri_addr) {
list($start, $end) = explode('|', $pri_addr);
// IF IS PRIVATE
if($long_ip >= ip2long($start) && $long_ip <= ip2long($end))
return (TRUE);
}
}
return (FALSE);
}
  • 使用位操作符>>进行判断
1
2
3
4
5
6
7
8
9
10
11
12
function ip_is_internal($ip) { 
$ip = ip2long($ip);
if (!$ip) {
return false;
}
$net_local = ip2long('127.255.255.255') >> 24; //127.x.x.x
$net_a = ip2long('10.255.255.255') >> 24; //A类网预留ip的网络地址
$net_b = ip2long('172.31.255.255') >> 20; //B类网预留ip的网络地址
$net_c = ip2long('192.168.255.255') >> 16; //C类网预留ip的网络地址
return $ip >> 24 === $net_local || $ip >> 24 === $net_a
|| $ip >> 20 === $net_b || $ip >> 16 === $net_c;
}
12

greatcl

13 日志
2 分类
16 标签
GitHub
友情链接
  • VlugarNote
  • MacTalk
  • Picksomething
  • fookwood
© 2016 — 2017 greatcl
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.2
|
Hosted by Coding Pages