路过秋天

同样的3年,有的人从学生到当了MVP了,而我却在原地,卖弄当年的代码,秋天的风,有点凄,有点凉!

公告信息
内涵是很强大的~~~别看外表~~~当犀利哥入侵不了的时候,感觉有种莫名的失落~~~
文章档案
最新评论

路过秋天版博客-皮肤制作指南 [附犀利哥入侵攻防站话题]

这里说点题外话:

其实本篇文章两天前就想写了,不过一直忙于和“犀利哥”进行一场“入侵”攻防战,所以写的晚了些时候。
话说在我第一次发布博客测试版本时,“犀利哥”就以其高调优雅的方式抢先闪亮登场,与我开始了第一次攻防战。
后来终于在两天后闭幕,“犀利哥”一去不再来,于是发文:基础却容易被忽略的那点事--web入侵方式及注意事项总结
可是在我发布完后,“犀利哥”终于再度高度现世,一次灭掉了我4张表,逼着我极力的从各个层面进行封杀,但持续了两天,还是无法阻挡“犀利哥”前进的步伐;

中间我实迫使出绝杀:包括二重加密,Cookie变更,日志记录追踪,还有整站代码审查等方式,在自以为封杀的完美的时候,“犀利哥”的一度出现,再次挂掉了我一张表。

再一次把我逼入绝境,我被迫使出斧底招数,在底层框架统一入口执行处
CYQ.Data 框架 加入高强度的过滤。

以下是所有输入的where条件进行过滤的代码:

过滤关键字函数代码
private static string FilterChar(string text)
{
text
= text.Replace("--", "").Replace(";", "").Replace("&", "").Replace("*", ""
);
string lowerText =
text.ToLower();
string[] items = lowerText.Split(' '
);
if (items.Length == 1 && lowerText.Length > 30
)
{
Log.WriteLog(text);
//记录日志

if (text.IndexOf("%20") > -1)
{
return string
.Empty;
}
}
int keyIndex = -1
;
bool isOK = false
;
for (int i = 0; i < filterKey.Length; i++
)
{
keyIndex
=
lowerText.IndexOf(filterKey[i]);
if (keyIndex> -1
)
{
foreach (string item in items) // createtime

{
if (item.IndexOf(filterKey[i])>-1 && item.Length>
filterKey[i].Length)
{
isOK
= true
;
break
;
}
}
if (!
isOK)
{
Log.WriteLog(filterKey[i]
+ text);//记录日志

return string.Empty;
}
else

{
isOK
= false;
}
}
}
return
text;

}


public static string[] filterKey = {"select","master","delete","drop","update","truncate","create","exists","insert"
,
"asc(", "while","xp_cmdshell","add","declare","exec","ch","ch("
,
};

可是“犀利哥”太厉害了,绕过了我所有的封杀,我的一切招数在他面前,一切都成了浮云~

在强大的攻势下,我怀疑数据库链接失守了,是否“犀利哥”另建了一个账号,于是执行以下语句,询问痴心用户有几人:

select * from master.sys.sql_logins

执行后完全发现并无其它陌生用户在场,于是,只好继续追加其它封杀方式。

为了查明真现,我在各路关口设置路障,等着“犀利哥”再次光临,等了好久,“犀利哥”没来,可能正在上班了。

这时候,我把我的情况和以前的一个同事讨论了下,并给了他链接下载我发布的博客。


于是,他认真的分析起来了,时间一秒一秒的过去了,终于,他发现了,是他,战胜了“犀利哥”。

神秘神秘神秘!神秘的同事,究竟发现了什么??“犀利哥”完美的作案手法,又是什么??这一切的迷团究竟是什么?

答案终于要揭晓了:各位观众......................4条A

答案就是:

神秘的犀利歌作案手法揭晓,点击查看

原来,我发布的V1.0正式版里,带有我远程演示地址 http://cyqdata.com/ 的数据库链接字符串。真是好大的一个太阳。
于是,一切都成浮云了,现在演示版本临时切换到Access数据库了,由于虚拟主机数据库改不了密码[-_-..竟然有这种事],只好重新又开了一个数据库了。

好了,废话说完了,现在进入说明 路过秋天版博客 的其中一个小点,如何制作皮肤

平易近人,强大的兼容扩展设计

本博客的模版使用独出一格,非常闪亮,仅需要在普通美工制作完的页面html中,稍为加工,即可完成一套新款皮肤。

记得在发布博客V1.0时,有人说仅表面就说太丑陋,说这话的人,完全是看不到本博客的内涵;

因为本人不是美工,无法制作精美的衣裳,但不代表它本身无法穿上美丽的衣裳。

再说,我并不觉和我提供的第一套模版不好看,我觉的相当的简洁,优美,不过这都不是重点,重点是它能穿上其它衣裳。

由于本人不是美工,也不会美工,但是又得写教程,这时候,我只能向博客园借一套衣裳来展示下了

博客园有N百套皮肤,可怜都没提供下载,不过倒是一套标准的模板,是演示如何制作博客完皮肤的示例模版,

我这里就借来穿一穿,dudu别介意哦
~~
[我花了一个半小时,才把它勉强穿了起来,说起来也费了我不少劲]

这里是其博客园皮肤设计帮助所在地:
http://skintemplate.cnblogs.com/
,二话不说,把它的标准模块下载下来。

下面泛泛介绍个大概了:

1:我们比较下博客园的皮肤和系统博客的皮肤

左侧是博客园的标准皮肤,右侧是系统标准的皮肤,那左侧的是怎么化身和右侧一样的呢?

2:调整目录结构

为了和标准样式一致,就在左侧新建一个css文件来把Style拉进去吧,然后页面的样式路径要小动一下,这步原则上改不改也无所谓,不过改了看起来统一一点。

3:从主页下手,页面名称要保持一下

这里提示一下:html首行的DOCTYPE html public ,这里的public要为大写PUBLIC,注意下即可

把主页搞定了,其它页面基本手动禽来,先把default.htm改名成index.html,接下来就是套ID了,下面示例头部制作:

A:填充头部------------开始----------------------

A1:标题和说明:

<h1><a class="headermaintitle" href="http://justinyoung.cnblogs.com/">Yes!B/S!a>h1>
<h2>Justin Young's blogh2>

我们加上两个id,完成头部两个显示,改为完:
<h1 id="labSpaceName"><a class="headermaintitle" href="#">Yes!B/S!a>h1>
<h2 id="labSpaceIntro">路过秋天's blogh2>

说明:由于本博客采用以ID为节点填充方式,所以把id加在哪,哪个节点就会被填充替换。所以,拿到什么html页面,找准位置,往里加就行了。

A2:右上角的信息,博客园没有,只好自己加了,从原来的样式里copy过来:

<div id="headRightMenu" class="Body_Head_Top_Menu_Style">
<a id="labUserName" href="/" key="anonymous">游客a> | <a id="logStatus" href="/" key="login">登陆a> | <a href="/lang/china" key="china">中文a> | <a href="/lang/english" key="english">英文a>
|
<a href="/lang/custom" key="custom">雷语a>
div>
//说明:id="headRightMenu"节点下的a链接会自动增加Url前缀。

A3:导航菜单,直接替换内容即可:

<ul class="navList" id="headMenu">
<li><a key="index" href="/">首页a> li>
<li><a key="article" href="/article/">文章a> li>
<li><a key="photo" href="/photo/">相册a> li>

<li><a key="admin" href="/admin/">管理a> li>
ul>
//id="headMenu的节点下的a链接会自动增加前缀成如成:http://cyq1162.cyqdata.com/article

于是,整个头部轻松就解决完了,我们并没有修改博客园皮肤的任何样式,只需要追加ID或替换文字即可。

填充头部------------结束----------------------

由于这种替换是种烦锁上事情,这里就不从头写到尾了,只要基本明白这个原理,基本上可以到处拿模版,稍为加工即可成为一套衣裳了。

4:制作共同部分高级缓存commoncache.html

这个是什么来的呢?简单的说有点像用户控件,由于大部分的html,其头部,左侧,底部,基本是一致的,因此,本博客把这些抽取出来做为共同的部分缓存。

因此,commoncache.html实际上就是一个普通的html,或者说把index.html 拷贝一份也行。

有了commoncache.html之后,其它页面的html就减少了很多,我们来看一下其它页面是怎么使用这个commoncache.html的:

在所有页面的html中,我们用:<div cachefrom="header">div>来替换所有头部html

简单的说: cachefrom="id"语法,就是把当前节点,替换成commoncache.html中的id节点,

如果你看一下原始的html,就会发现有N个这样的cachefrom语法

5:多国语言文件

这个从系统default皮肤里copy一份过来,然后看着改着先。

其关键语法就是key="id"与keyvalue="id"

这个以后介绍。

6:制作一张template.gif

就是模版的缩略图了,用于在后台选择模版时选择。

演示及下载

目前已经借了一件穿到在线演示中了:http://cyqdata.com/

提供修改的模版下载:[置顶]CYQ.Data 轻量数据层之路 bug反馈、优化建议、最新框架下载

若想使用在自己的系统中,需要手动在Blog_Skin表中添加一条数据,怎么添加?你懂的。

还有,V1.0 正式版今天更新了一下,虽然之前和“犀利哥”攻防战是浮云一场,不过对安全有严格要求的,可以再次下载。

[最后说明:由于博客园的标准模版中竟然没有分页的样式,所以在分页样式里有点小问题,哈哈~~~]

秋色园是QBlog的官方站点,由路过秋天创建,基于cyqdata数据层框架开发的支持多用户、多语言、多数据库(access,mssql,oracle)、目录级url等功能强大的博客系统
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

2010/10/18 21:32:00 | 开发测试及演示 | |

#234游客2010/11/17 8:04:15
1�" or sleep(10)#
#233游客2010/11/17 8:04:10
1�' or sleep(10)#
#232游客2010/11/17 8:04:02
1" or sleep(10)#
#231游客2010/11/17 8:03:56
1' or sleep(10)#
#230游客2010/11/17 8:03:51
1 or sleep(10)#
#229游客2010/11/17 8:03:42
1');waitfor delay '0:0:10'--
#228游客2010/11/17 8:03:37
1);waitfor delay '0:0:10'--
#227游客2010/11/17 8:03:32
1';waitfor delay '0:0:10'--
#226游客2010/11/17 8:03:26
1;waitfor delay '0:0:10'--
#225游客2010/11/17 8:03:21
1" and sleep(10)#
#224游客2010/11/17 8:03:15
1' and sleep(10)#
#223游客2010/11/17 8:03:10
1 and sleep(10)#
#222游客2010/11/17 8:03:00
acunetix_bad_value' or 2='2
#221游客2010/11/17 8:02:49
1+31337-31337
#220游客2010/11/17 8:02:15
1' || '
#219游客2010/11/17 8:01:37
1" and "1"="1
#218游客2010/11/17 8:01:23
1' and '1'='1
#217游客2010/11/17 8:01:00
1 and 1=1
#216游客2010/11/17 8:00:43
1" and "1"="1" --
#215游客2010/11/17 8:00:13
1' and '1'='1' --
#214游客2010/11/17 7:59:53
1 and 1=1 --
#213你不认识我2010/11/17 6:14:37
";printf(md5(acunetix_wvs_security_test));exit;//
#212你不认识我2010/11/17 6:14:37
';printf(md5(acunetix_wvs_security_test));exit;//
#211你不认识我2010/11/17 6:14:36
;printf(md5(acunetix_wvs_security_test));exit;//
#210你不认识我2010/11/17 6:14:36
printf(md5(acunetix_wvs_security_test));exit;//
#209你不认识我2010/11/17 6:14:35
";printf(md5(acunetix_wvs_security_test));exit;//
#208你不认识我2010/11/17 6:14:35
';printf(md5(acunetix_wvs_security_test));exit;//
#207你不认识我2010/11/17 6:14:33
;printf(md5(acunetix_wvs_security_test));exit;//
#206你不认识我2010/11/17 6:14:30
printf(md5(acunetix_wvs_security_test));exit;//
#205游客2010/11/17 6:14:30
";printf(md5(acunetix_wvs_security_test));exit;//
#204游客2010/11/17 6:14:29
';printf(md5(acunetix_wvs_security_test));exit;//
#203游客2010/11/17 6:14:29
;printf(md5(acunetix_wvs_security_test));exit;//
#202游客2010/11/17 6:14:29
printf(md5(acunetix_wvs_security_test));exit;//
#201游客2010/11/17 6:14:28
";printf(md5(acunetix_wvs_security_test));exit;//
#200游客2010/11/17 6:14:28
';printf(md5(acunetix_wvs_security_test));exit;//
#199游客2010/11/17 6:14:28
;printf(md5(acunetix_wvs_security_test));exit;//
#198游客2010/11/17 6:14:27
printf(md5(acunetix_wvs_security_test));exit;//
#197你不认识我2010/11/17 6:14:15
SomeCustomInjectedHeader:injected_by_wvs
#196你不认识我2010/11/17 6:14:15
SomeCustomInjectedHeader:injected_by_wvs
#195你不认识我2010/11/17 6:14:14
SomeCustomInjectedHeader:injected_by_wvs
#194你不认识我2010/11/17 6:14:14
SomeCustomInjectedHeader:injected_by_wvs
#193游客2010/11/17 6:14:14
SomeCustomInjectedHeader:injected_by_wvs
#192游客2010/11/17 6:14:14
SomeCustomInjectedHeader:injected_by_wvs
#191游客2010/11/17 6:14:14
SomeCustomInjectedHeader:injected_by_wvs
#190游客2010/11/17 6:14:14
SomeCustomInjectedHeader:injected_by_wvs
#189你不认识我2010/11/17 6:13:59
/some_inexistent_file_with_long_name
#188游客2010/11/17 6:13:49
/some_inexistent_file_with_long_name
#187你不认识我2010/11/17 6:13:48
/some_inexistent_file_with_long_name
#186游客2010/11/17 6:13:42
/some_inexistent_file_with_long_name
#185你不认识我2010/11/17 6:13:28
NULL