存档

‘高级民工’ 分类的存档

Milestone使用USB上网

2010年5月9日 没有评论
$su
#busybox route add default gw 192.168.0.1
#setprop net.dns1 8.8.8.8

192.168.0.1为USB连接后对应的IP地址。
主要的问题可能是无法解析域名,设置DNS为8.8.8.8后可以正常解析。

分类: 高级民工 标签: ,

一个简单的java Dword类

2010年4月19日 没有评论

一个java版的Dword类,实现简单的Dword操作。目前只包含xor,shr,and,add四种运算,以及在dword,int,byte数组之间的操作。

下载地址:download

分类: 高级民工 标签:

php使用cookie防止重复提交是不安全的

2010年3月20日 没有评论

最近在做一php项目时遇到需要检查重复提交的情况,搜索了一下发现一种做法是使用cookie来防止,起初一看还觉得可行,但细想以下发现在某些情况下是无法达到目标的。
  cookie这个东西是属于客户端的,在设置了cookie后每次访问浏览器都会将设置的cookie发送给服务器。用cookie来防止重复提交的做法是在访问需要提交信息的页面时设置一个cookie值,在接收的页面验证这个cookie值是否满足规则。
如下面的测试代码:
test0.php

< ?php
sleep(2);//模拟有延迟比较大的情况
if($_COOKIE['onlypost'] == 't'){
	setcookie("onlypost", 'f'); 
	if (isset ( $_POST ['msg'] )) {
		mysql_connect ( 'localhost', 'root', 'root' );
		mysql_select_db ( 'test' );
		mysql_query ( "insert into t_msg(msg) values('" . $_POST ['msg'] . "')" );
	}
    echo 'submit ok';
}else{
	echo 'submit error!';
}
?>

test1.php

< ?php 
setcookie("onlypost", 't'); 
?>
<form action="test0.php" method="post">
msg:<input type="text" name="msg"/><input type="submit"/>
</form>

测试数据表

CREATE TABLE `t_msg` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `msg` VARCHAR(50) ,
  PRIMARY KEY (`id`)
)

在访问test1.php时,如果用户的延迟比较大,填写信息后连续两次或多次点击提交按钮。因为在第一次提交后服务器还没有返回信息重设cookie,浏览器接下来发送的请求数据包中cookie的值始终是一样。
阅读全文…

分类: 高级民工 标签: ,

wordpress的缓存机制

2010年3月11日 1 条评论

  Wordpress缓存机制分为内置缓存机制和外部缓存插件两种方式。
  Wordpress从2.0起出现的cache.php实现了一个在WP内部的缓存机制。从代码上看其作用只能适当的减少在一次请求过程中SQL查询的次数,而不能如JAVA、ASP.NET那样实现驻留在内存中的缓存机制。这与PHP的特性有关,PHP是一种解释性的语言,其是无法驻留内存的,除非使用PHP相关的缓存插件。

  对于目前的wordpress缓存插件而言,都以生成静态页面的方式实现。如比较常用的wp_super_cache与cos_html_cache。
  开启这些高级的缓存存机制的一般要在wp-config.php中定义WP_CACHE,即:

define('WP_CACHE',true);

这样在wordpress的wp-setting.php中就会加载wp-content/advanced-cache.php。

wordpress内置缓存的工作原理与流程:

在一次请求过程中,如果开启了内置缓存机制,那么在执行一次查询时将会把一些数据通过cache.php中的wp_cache_set()方法来暂时存放。在这次请求中如果再次出现查询且满足一些逻辑上的条件,那么会先通过wp_cache_get()方法来查找缓存中的数据,如果存在那么直接取到,如果不存在再向数据库查询。这样就减少了一些对数据库的查询次数。不过需要注意的是这个缓存只是存在于本次请求周期中。

分类: 高级民工 标签: ,

Nat类型

2010年2月3日 没有评论

根据STUN协议(RFC3489),NAT大致分为下面四类:
1) Full Cone

这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口的UDP数据报都可以到达A.不管是不是C发过来的.
例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88
A(192.168.8.100:5000) -> NAT(202.100.100.100:8000) -> C(292.88.88.88:2000)
任何发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000)

2) Restricted Cone

这种NAT内部的机器A连接过外网的机器C后,NAT打开一个端口.然后C可以用任何端口和A通信.其他的外网机器不行.
例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88
A(192.168.8.100:5000) -> NAT(202.100.100.100 : 8000) -> C(292.88.88.88:2000)
任何从C发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000)

3) Port Restricted Cone

这种NAT内部的机器A连接过外网的机器C后,NAT打开一个端口.然后C可以用原来的端口和A通信.其他的外网机器不行.
例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88
A(192.168.8.100:5000) -> NAT(202.100.100.100 : 8000) -> C(292.88.88.88:2000)
C(202.88.88.88:2000)发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000)

以上三种NAT通称Cone NAT(圆锥形NAT).

4) Symmetric(对称形)

对于这种NAT.连接不同的外部目标.原来NAT打开的端口会变化.而Cone NAT则不会.虽然可以用端口猜测.但是成功的概率很小.(一部分Nat路由是连续端口,一部分是在某一范围内随机)

近期准备研究symmetirc下的UDP打洞。

分类: 高级民工 标签: