存档

2011年9月 的存档

破解防盗链,js设置空白referer图片

2011年9月26日 4 条评论

大部分防盗链都是判断referer,可以通过在客户端本地改变图片调用破解之。

//破防盗链js
function ImgRebuild() {
	$("#post img").each(function(i){
		url = this.src;
		width = this.width;
		height = this.height;
		var imgid = Math.random(),
		frameid = 'frameimg' + imgid;
		window['img'+imgid] = '<img id="img" src=\''+url+'?kilobug\' /><script>window.onload = function() { parent.document.getElementById(\''+frameid+'\').height = document.getElementById(\'img\').height+\'px\'; }<'+'/script>';
		img_r = '<iframe id="'+frameid+'" src="javascript:parent[\'img'+imgid+'\'];" frameBorder="0" height="' +height+ '" scrolling="no" width="100%"></iframe>';
		$(this).replaceWith(img_r);
	});
	return '';
}
ImgRebuild();

Demo:
http://www.tiham.com/page/anti-anti-hotlinking.html
兼容性:已测试IE6、IE7、IE8、chrome 7、FF3.6、Opera10.63

防御方法:
1、不允许referer为空(不建议,因在某些开启隐私模式的浏览器中,或https页面引用下,referer是空的);
2、地址变更(lighttpd的是根据有效时间,nginx的根据是md5);
3、登录校验(如必须登录网站帐号后才能访问);

分类: web 标签:

LCS最长公共子串算法

2011年9月26日 没有评论

LCS问题就是求两个字符串最长公共子串的问题。解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0。然后求出对角线最长的1序列,其对应的位置就是最长匹配子串的位置.

下面是字符串21232523311324和字符串312123223445的匹配矩阵,前者为X方向的,后者为Y方向的。不难找到,红色部分是最长的匹配子串。通过查找位置我们得到最长的匹配子串为:21232

分类: 未分类 标签:

字符串相似/差异度算法(Levenshtein Distance)

2011年9月9日 1 条评论

Levenshtein Distance算法(中文翻译:编辑距离算法) 由俄国科学家Levenshtein在1965年提出。

编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

例如将kitten一字转成sitting:
sitten (k→s)
sittin (e→i)
sitting (→g)

阅读全文…

分类: 算法 标签:

提取html闭合标签

2011年9月1日 没有评论

思路:在html代码符合规范前提下,分别设置要提取的起始标签和结束标签两个游标,从起始标签s位置顺序查找,直到起始游标大于结束游标,此时闭合标签范围在s到结束游标内。

实现:

$s_tag = “<{$tag}”;
$e_tag = “</{$tag}>”;
$s_next_pos = $e_next_pos = $s_pos = $e_pos = 0;
$loop = 50;
while(1){
$s_pos = strpos($str, $s_tag, $s_next_pos);
$e_pos = strpos($str, $e_tag, $e_next_pos);
$s_next_pos = $s_pos + 1;
$e_next_pos = $e_pos + 1;

if($s_pos > $e_pos)
break;

if($loop– == 0) break;
}
$result = substr($str, 0, $e_pos);

分类: 算法 标签: