首页

前言

  大概在 2010 年前后,那会儿非常流行搭博客,核总本人也想搭一个,但是找来找去,找不到一个安全、简洁、高效的博客程序,于是乎狠心下来自己从零开发一个,于是这套博客系统诞生了,后来命名为 Nuclear-Blog

  说起来从零开发博客,并且全部代码接近于完全原创,国内做到的人估计屈指可数,一是需要大量时间和经验,二是需要极高的编程功力,只是这两点就足以令 99% 的人望而却步,所以大多数人只是拿个开源的博客二次开发一下、换个皮、改个模板玩玩

  从 2010 年到 2015 年,这套博客程序经历了无数次迭代更新,再加上核总从骨子里追求精益求精、登峰造极,所以这 5 年时间里已经将该系统打磨的极其安全、稳定、简洁、高效了,同时也极大地提升了个人编程水平,并且顺带学到了很多底层协议、知识,对以后的个人综合技术水平提升起到了很大的帮助。

  那么,有细心的读者发现了,为何 2015 年后没有更新了呢?

  原因很简单,该有的功能都有了,不该有的功能也加了,一个博客系统已无限接近于成熟和完美,所以后边更新的频率越来越低,因为没啥可更新的了,哈哈哈……

  历史上也开源过几次,版本列表如下:

  后来到了 2018 年,由于 Asp 无法跨平台,试了很多方案无解,同时 PHP 已充斥了整个行业,Asp 生存空间越来越小(过时但永不淘汰),再加上个人精力有限,最终放弃了继续开发

  遂于 2018 年中旬抽时间整理了之前的内容,并彻底更换网站系统为 Caddy + Hugo 跨平台完美组合,于 2018 年 9 月中旬重新上线

  随着时代的变迁,从最开始的博客,接下来轻博客,到现在的微博,大家越来越不喜欢臃肿的长文章,更喜欢短小精悍的碎片信息,这年头还坚持写博客的人,已经寥寥无几了。

  再后来,有很多朋友喜欢这套博客程序,原因是很简洁而且相当安全,于是在众多朋友频繁催更之下,抽时间整理了最终版的源码,现发布出来。

  目前版本是 Nuclear-Blog v7.2,也是最终版本,以下是使用说明和相关功能介绍。

快速使用

  1、下载 Nuclear-Blog v7.2 压缩包并解压。

  2、在文件 \admin\Index.asp修改后台登陆账号和密码,默认 admin:123456。

  3、将后台管理主目录 /admin/ 修改为其他人猜不到的名字

  4、在 /inc/conn.asp将数据库名字修改为其他人猜不到的,别忘了将两个对应的 .mdb 文件也改名

  5、上传所有文件到你的 Windows 服务器或者支持 Asp 的虚拟主机、空间,如有必要,请参考“初始化设置”对服务器进行相关调整。

  6、访问后台,修改一下网站名称之类的基本参数,添加一点内容,Enjoin!

  操作过程中如果有疑问或者报错,请参考底下的手册

  本系统已经十分安全强迫症患者可以参考底下设置一下相关权限。

文件结构

  本博客系统的文件结构简洁逻辑清晰,每个文件中都有详细的代码说明和注释,以供二次开发或者修改代码所参考,具体结构如下:

路径 说明
   
\后台密码加密算法\ 加密算法,用于生成 \admin\Index.asp 中后台登陆账号和密码的密文,独立运行,可以删除
   
\favicon.ico 浏览器地址栏的小图标,也用于收藏夹,非必须的,看个人喜好更换或删除。
\404.asp 自定义的 404 错误页面。
\file.asp 所有的附件、图片、文件处理程序,主要功能是提取数据库中的文件,缓存并输出
\index.asp 核心文件,所有的首页、文章、列表、内容处理程序。
   
\admin\ 后台相关文件,该目录名可以随意改名,最好修改成别人猜不到的
\admin\Index.asp 后台登陆账号和密码在这里改,配合上边的算法使用,默认账号和密码 admin:123456。
   
\cache\ 所有页面、文件、图片的缓存,访问会自动生成,可以随时手动删除或在后台清空,程序会在你修改数据的时候自动更新缓存,核心代码全自动的,基本不用管。
   
\image\ 所有的模板文件、图片、CSS、JS 等静态资源存放路径。
\image\Content.html 内容页面模板。
\image\Index.html 首页模板。
\image\List.html 列表模板。
\image\LiuYan.html 留言板模板。
\image\face\ 留言板的默认头像。
\image\KindEditor\ KindEditor 编辑器,用的纯静态版,不用担心任何漏洞
   
\inc\0b1214c54b5a59d3_data.mdb 存放文章、浏览、系统设置的数据库,建议名字改成别人猜不到的,以防非法下载,造成数据泄露
\inc\0b1214c54b5a59d3_file.mdb 存放附件、图片等文件二进制数据的数据库,建议名字改成别人猜不到的,以防非法下载,造成数据泄露
   
\inc\MD5.asp MD5 算法。
\inc\Conn.asp 数据库链接配置和一些公共函数,如果修改了数据库名字,记得在这里也改一下
\inc\Anti-CC_CDN.asp 早年写的一个高效防 CC 攻击模块(支持 CDN,也可以防路径扫描、恶意采集和暴力破解),具体参考Asp 防御CC攻击模块 (Anti-CC.asp)
   
\liuyan\index.asp 留言板。
\liuyan\liuyan.asp 留言板,提交留言。
   
\music\ 一个在线音乐视频播放器,主要用于在文章中插入多媒体文件

安全设置

  如果你在 \admin\Index.asp 中添加:

  <!--#include file="Inc/Anti-CC_CDN.asp"-->

  还能天然免疫暴力破解登陆密码攻击,退一万步讲,即使有后台权限也拿不到 webshell,最多删删文章、改改首页意淫下罢了(所以建议多备份)。

  XSS 之类的就更不用担心了,不存在任何 XSS 漏洞(欢迎各种代码审计)

  如你用的 CDN 的话,所有访客 IP 地址是通过 HTTP_X_FORWARDED_FOR 获取的,但是不用担心,该函数已进行安全处理

  为了安全起见,建议设置一下文件访问权限,其实不设置也不要紧,这套系统从正面无人能入侵(再次欢迎各种代码审计),建议的文件访问权限设置如下:

路径 权限
   
\cache\ 及子目录 可读可写,禁止执行
   
\inc\ 可读可写(主要是为了能修改 mdb 数据库
\inc\*.asp 只读,不可写
   
其余所有目录、文件及子目录 只读,不可写

数据备份

  Nuclear-Blog v7.2 博客系统备份十分简单方便,只需要打包一下除 \cache\ 目录之外的所有文件即可。

  建议首次打包备份后,以后只需要单独打包一下 \inc\ 目录下的两个 mdb 数据库即可,以减少传输数据量。

  众所周知,三处离线灾备是基本原则。

依赖组件

  网站留言版是可以设置有新留言自动发送邮件提醒的,具体设置见后台,该功能需要依赖 JMail 发送邮件组件,下载地址见底下。

  也有无组件发送邮件的方法,你可以自己改改,但效果不太好,因为是公共地址发送,各种被滥用,容易进垃圾箱(100%),相关代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<%
' CDOSYS 发邮件、Win7 无组件发送、支持 Godaddy 的发邮件代码、非 Jmail(使用 godaddy 公共 SMTP 服务器 relay-hosting.secureserver.net 不需要用户密码验证,需要系统:Windows/IIS)
' 注意:Godaddy 的空间/虚拟主机禁止了所有三方 SMTP 服务器,只能用他自己服务器。注意需要使用 utf-8 编码,否则乱码!
' http://blog.csdn.net/tangolivesky/article/details/6266985
' https://sg.godaddy.com/zh/help/using-cdosys-to-send-email-from-your-windows-hosting-account-1073
' 1、发现很有意思的地方,就是发件人可以随意填写,都能发送成功,根本不需要什么godaddy的企业邮局,这一点让我很惊讶。
' 2、objMail.BodyPart.Charset="utf-8" 增加了编码定义功能,发送邮件不再乱码
' 3、邮件到达的速度时快时慢,有时候可以达到秒速,有时候可能要好几分钟
' 4、进垃圾邮箱几率很大,需要加白名单

' 创建组件
dim CDOMail, STUl
set CDOMail = CreateObject("CDO.Message")

' 设置邮件参数
CDOMail.From = "from@163.com" '发信人
CDOMail.To = "to@163.com" '收信人
CDOMail.Subject = "标题" '标题
CDOMail.BodyPart.Charset = "utf-8" '编码
CDOMail.HTMLBody = "内<br>容" 'Html 内容
' CDOMail.TextBody = "邮件内容" '文本内容
' CDOMail.AddAttachment "D:\www\images\right.png"  '附件

' 配置 SMTP 服务器
STUl = "http://schemas.microsoft.com/cdo/configuration/"
With CDOMail.Configuration.Fields
	.Item(STUl & "sendusing") = 2 '发送使用端口
	.Item(STUl & "smtpserverport") = 25 'SMTP服务器端口
	.Item(STUl & "smtpconnectiontimeout") = 60 '连接超时(秒)
	.Item(STUl & "smtpserver") = "relay-hosting.secureserver.net" 'Godaddy 公共 SMTP 服务器(不需要用户密码验证)
	' .Item(STUl & "smtpserver") = "smtp.163.com" 'SMTP服务器地址
	' .Item(STUl & "smtpauthenticate") = 1 '远程服务器需要验证
	' .Item(STUl & "sendusername") = "from@163.com" '发送方邮箱地址
	' .Item(STUl & "sendpassword") = "password" '发送方邮箱密码
	.Update
End With

'执行发送
CDOMail.Send
%>

初始化设置

1、启用父路径

  IIS -> 网站 -> 网站名 -> Asp -> 启用父路径 -> True

  否则会报错:

1
2
3
4
5
6
7
Active Server Pages 错误 'ASP 0131'

不允许的父路径

/liuyan/index.asp,行 1

包含文件“../Inc/Conn.asp”不能用“..”表示父目录。

  或者你把所有包含文件改成绝对路径,就不用修改该设置了,但是如果运行在子目录兼容性会变差

2、兼容 ≥ IIS 7.0

  IIS 7.0 及更高版本使用 32 位 mdb 数据库必须进行如下操作:

  IIS -> 应用程序池 -> 网站名 -> 右键高级设置 -> 启用 32 位应用程序 -> True

  否则会报错:

1
2
3
4
5
ADODB.Connection 错误 '800a0e7a'

未找到提供程序。该程序可能未正确安装。

/Inc/Conn.asp,行 33

3、临时调试程序

  【警告:如非调试请勿进行此操作】

  如需临时调试程序代码,请执行以下操作:

  IIS -> 网站 -> 网站名 -> Asp -> 编译/调试 -> 将错误发送到浏览器 -> True

  并注释掉相关文件的 On Error Resume Next,共有以下文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
file.asp
4:On Error Resume Next

index_bak.asp
29:On Error Resume Next

admin\File_UpLoad_Class.asp
430:    On Error Resume Next
470:    On Error Resume Next

liuyan\liuyan.asp
4:On Error Resume Next

liuyan\index.asp
4:On Error Resume Next

index.asp
29:On Error Resume Next

4、一些其他设置

  /inc/conn.asp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<%
'...

'是否以CDN模式运行(获取访客真实IP地址)
IsCDN = False

'缓存文件存放目录,切记最后要加:\
CachePath = Server.MapPath("/cache/") & "\"

'主数据库路径(存放:文章、留言、配置)
DataPath = Server.MapPath("/inc/0b1214c54b5a59d3_data.mdb")

'文件数据库路径(存放:文件)
DataPath_File = Server.MapPath("/inc/0b1214c54b5a59d3_file.mdb") 

'...
%>

网站模板

  模板很简单,由于全站页面并不多,所以只有几个 .html 文件,所有模板相关的文件都储存在 \image\,具体参考上边的文件结构,采用 html + 标签替换的方式生成实际页面内容,具体可以参考 index.asp 和 /inc/conn.asp 中的代码。

  模板支持的标签和变量

有效范围 变量标签 功能描述
     
全局变量 {网站名称}、{网站域名} 网站名称、网站域名。
全局变量 {主页描述}、{主页关键字} 主页的描述、关键词,给搜索引擎蜘蛛看的,SEO 优化用的。
全局变量 {推荐内容}、{友情链接} 自定义的推荐内容、友情链接代码。
全局变量 {统计代码} 统计用的JS代码。
全局变量 {顶部广告}、{底部广告} 两个独立的广告代码。
全局变量 {当前页码} 当前文章或列表的页码,首页为 0。
全局变量 {随机数} 产生一个随机数,一般用来做防采集,随机乱码用的。
     
主页变量 {最新内容} 按ID从大到小排序(倒叙)的文章列表。
主页变量 {最多浏览} 按点击数从大到小排序(倒叙)的文章列表。
主页变量 {随便看看} 随机提取的文章列表。
     
列表变量 {文章列表}、{页码列表} 按照ID或点击数从大到小排列的文章列表及页码。
     
文章变量 {标题}、{作者}、{内容} 文章的标题、作者及内容。
文章变量 {时间}、{修改}、{点击数} 文章的发表、最后修改时间,以及点击数。
文章变量 {关键字}、{描述} 文章的关键词、描述,给搜索引擎蜘蛛看的,SEO 优化用的。
文章变量 {默认作者} 文章的默认作者,会替换为系统设置里指定的值。
文章变量 {简单描述} 截取适当长度的文章描述,在文章页面顶部做简单显示。
文章变量 {上一篇链接}、{上一篇标题} 上一篇文章的ID(编号)、标题。
文章变量 {下一篇链接}、{下一篇标题} 下一篇文章的ID(编号)、标题。
文章变量 {本页链接} 当前文章页面的完整 Url 地址,用于在转载信息里调用。
文章变量 {评论数} 当前文章对应的评论条数。

  提示:测试模板的时候记得禁用缓存或者隔一秒自动删除缓存文件,以便查看最新修改后的效果,这是一个自动循环删除缓存的批处理例子:

1
2
3
4
5
6
7
8
9
echo off & cls
echo 为防止意外执行造成数据丢失,请按任意键以继续……
echo.
pause

:1
del /s /f /q /a "%cd%\cache\*.*"
ping 127.0.0.1 -w 1 -n 3
goto 1

  以上代码保存到:\网站跟目录\清理缓存.bat

  提示:默认的模板经过长期微调,对各大搜索引擎的 SEO 十分友好,可以参考。

下载地址

  Nuclear-Blog v7.2,需要 WinRAR 5.0 或更高版本解压。

  w3 JMail v4.5 免费版.msi,JMail 发送邮件组件,新留言自动发邮件提醒用的。

相关截图

首页

首页底部

文章列表

文章内容

文章留言

后台登录界面

后台数据统计

后台网站设置

后台变量标签

后台媒体播放

后台文件列表

后台文章列表

后台文章添加及编辑

后台留言列表

后台留言编辑

后台文件上传_缩略图模式

后台文件上传_列表模式_上传中