[JavaScript]如何防止自己的网站被别人以 iframe 盖台嵌入 (与反制办法)
“iframe (内置框架)”是用来在网页中的特定位置嵌入另一个网页。目前 Facebook、Google+、Twitter...等用来在网页上显示社群内容的社群元件,几乎都是以 iframe 实作出来的。
原本框架是一种很好的应用,但如果是自己辛苦制作的网页被别人的网站以 iframe 嵌入,因而出现在别人的网站里,成为别人网站的一部份!!这种感觉就像是自己的心血被别人整碗捧走一样!!
导回自已网站的方法
方法 1
于网页的原始码加入以下 Script:
<script type="text/javascript">
if( top.location != document.location ){
top.location.href = document.location.href;
}
</script>
以上的 Script 会检查浏览器最上层视窗的网址是否与目前网页的网址一致,如果不一致,则把最上层视窗的网址改为目前网页的网址,就酱。
方法 2 (反制办法)
于网页的原始码加入以下 Script:
<script type="text/javascript">
if( top.location != document.location ){
document.write("<h1 style='color:#FF0000'>未经授权嵌入别人的网页是可耻的行为!!</h1>(<a href='"+document.location+"' target='_blank'>原站网址</a>)");
}
</script>
以上的 Script 会检查浏览器最上层视窗的网址是否与目前网页的网址一致,如果不一致,就显示:
未经授权嵌入别人的网页是可耻的行为!!
(原站网址)
我比较不喜欢与人家互呛,所以我通常是用“方法 1”啦!
[MySQL]数据库的备份与还原
数据库汇出/备份
1. 备份单一数据库:
$ mysqldump -u Username -p --opt DatabaseName > Backup.sql
2. 仅备份特定数据库下的资料表:
$ mysqldump -u Username -p --opt DatabaseName Table1 Table2... > Backup.sql
3. 仅汇出资料表结构:
$ mysqldump -u Username -p --opt --no-data DatabaseName > Backup.sql
4. 备份全部的数据库:
$ mysqldump -u Username -p -A --opt > AllBackup.sql
mysql/mysqldump/mysqladmin 与“登入”有关的参数说明:
- -u Username: 用来存取 mysql 资料表的用户名称。此参数可省略,若省略,则表示为目前登入 linux 的用户名称。
- -p: 于执行时再询问密码。
- -pPassword: 用来存取 mysql 资料表的密码,-p 与 Password 的中间不可有空格。
数据库汇入/还原
1. 建立数据库,再从备份档汇入单一数据库:
$ mysqladmin -u Username -p create DatabaseName
$ mysql -u Username -p DatabaseName < Backup.sql
2. 从备份档汇入全部的数据库 (不需先建立数据库):
$ mysql -u Username -p < AllBackup.sql
状况处理:
状况 1.
汇入数据库时出现错误讯息: Unknown collation: 'utf8mb4_unicode_ci' 或 Unknown collation: 'utf8mb4_unicode_520_ci'
说明:
MySQL 于 v5.5.3 版之后才有“utf8mb4”的编码格式。原本 utf8 的最大编码长度为 3bytes,而 utf8mb4 的最大编码长度为 4bytes,因此它比 utf8 可以储存更多的字符。但是以常用的文字来讲,utf8 已经完全足够使用了。若不升级 MySQL Server,则只须将汇入的字符编码格式改为原本的 utf8。
解决方法:
先将备份档中的 utf8mb4 字串替换成 utf8: (以下的三行指令需依照顺序执行)
$ sed -i 's/utf8mb4_unicode_ci/utf8_general_ci/g' Backup.sql $ sed -i 's/utf8mb4_unicode_520_ci/utf8_general_ci/g' Backup.sql $ sed -i 's/utf8mb4/utf8/g' Backup.sql
全部替换完再进行汇入:
$ mysql -u Username -p DatabaseName < Backup.sql
状况 2.
以 mysqldump 汇出数据库时出现错误讯息: Got error: 1044: Access denied for user 'backup'@'localhost' to database 'test' when using LOCK TABLES
说明:
这错误讯息已说明了用来执行 mysqldump 的帐号没有“LOCK TABLES”权限! 通常用 root 帐号汇出数据库不会发生这个问题,因为我们会给 root 所有的权限。然而我们在设定其它帐号时可能会忘了给它设定“LOCK TABLES”权限,而执行 mysqldump 至少需要“SELECT”与“LOCK TABLES”权限才行,最好再加上“SHOW VIEW”、“EVENT”与“TRIGGER”。
解决方法:
重新授予用户权限:
grant SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER on *.* to 'backup'@'localhost' identified by '{Password}';
flush privileges;
状况 3.
从 cpanel 下载的 MySQL 档案格式为 *.gz,可以用 gunzip 解压缩:
$ gunzip Backup.sql.gz
注意: 使用 gunzip 解压缩后,原本的 *.gz 会被删除!!若要保留旧档,须改用下列指令:
$ gunzip -c Backup.sql.gz > Backup.sql
数据库离线备份/还原
MySQL 的数据库放在 /var/lib/mysql 下,以数据库的名称做为目录的名称。直接将 /var/lib/mysql 下的数据库目录用 tar 指令个别压缩起来即可做为备份。要还原再把档案解压缩回去。
要以这种方式执行备份与还原都必须先停止 MySQL 的服务:
$ service mysqld stop
参考网页
处理 DNS 的 CNAME 造成收件者错误的问题
第一次遇到客户因为自己 Server 的 DNS 问题,造成我方要寄信给客户时,收件者的 EMail Address 会于 SMTP Server 端被自动变更 (寄给 [email protected] 会变成寄给 [email protected]),以致于客户收不到 EMail 的问题!! (客户可能以为是我方的问题)
我自己测试的结果是与 DNS 的 CNAME 有关:
C:\>nslookup -type=cname example.com Server: dns.hinet.net Address: 168.95.1.1 example.com canonical name = other.example.com
同时我在网络上找到一篇微软的 KB 文件,已经写得很清楚了,我就直接把内容放上来。
免跑银行,直接线上领取 Google AdSense 广告收入 (西联汇款)
2020/12/30 更新:
Google 通知,将于 2021 年初停止透过西联汇款支付款项,所以本网页的教学大概也没什么用了。
如要继续收到 Google 支付的款项,你必须登入自己的帐户,然后新增或选取其他收款方式 (汇款或支票)。
之前的内容:
Google AdSense
约莫等了半年,终于又收到了一笔 Google AdSense 的广告收入了,算是农历过年前的一个小小小红包。
在台湾,AdSense 的用户可以使用“西联汇款”来进行收款,目前台湾有支援西联汇款的银行有京城银行、大众银行与元大银行。
我是使用“京城银行”,这个有点陌生的银行。它的“网络西联汇款”服务可以直接将我的 AdSense 广告收益从美金转为台币存入我的银行帐户,并且不收取任何手续费、不用等待,但是会有汇损的问题。
不过我今天要操作收款时,发现做为“汇款人”的 Google 的身份又改变了! 原本的身份“Google Ireland Ltd. (爱尔兰)”,更早之前是“Google Inc. (美国)”,现在的汇款人身份则为“Google Asia Pacific Pte. Ltd. (新加坡)”!
这个付款人的资讯会影响我们能否正常收款,不过没关系,下面会教你如何识别付款者的身份。
[JavaScript]简易网页下拉选单,可支援 MouseOver 与 Click 事件
在网页界已经有很多的“下拉选单”程式了,不过似乎都搞得太过复杂或太华丽了。
其实下拉选单的原理很简单,一开始只是先让“子选单”隐藏,当鼠标移至“主选单”时再让子选单显示。因此,只要能控制网页元件的 display 样式属性就已经成功一半了。
因为本人喜欢重新发明轮子,所以也写了一个简易的网页下拉选单的程式,可以做为初学者入门的参考。
在范例的原始码中,我尽量让程式码看起来浅显易懂,并且只用 JavaScript,不使用 jQuery 或其它 Framework。我也尽量多写一些注解,希望 JavaScript 的初学者能看得懂。
[jQuery]中文的 jQuery 教学资源
如果想学 jQuery 的话,可以从下列的教学资源开始,读者应具有 HTML、JavaScript、CSS 的基础。
网站
上官林杰 - ericsk (2007)
- jQuery 学习心得笔记 (1) – 前言
- jQuery 学习心得笔记 (2) – 怎么使用 jQuery 来写 JavaScript
- jQuery 学习心得笔记 (3) – jQuery 的事件(Event)处理
- jQuery 学习心得笔记 (4) – Ajax (上)
- jQuery 学习心得笔记 (5) – Ajax (下)
- jQuery 学习笔记 (6) - 操作 DOM 物件
- jQuery 学习笔记 (7) - 扩充 jQuery
以上这几篇是我的 jQuery 启蒙文章。
Read more
修复 Linux 开机出现档案系统有不一致性 (UNEXPECTED INCONSISTENCY) 的错误问题
Linux 无法正常开机,出现错误讯息:
Checking filesystems /dev/sda1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY. (i.e., without -a or -p options) [FAILED] *** An error occurred during the file system check. *** Dropping you to a shell; the system will reboot *** when you leave the shell. Give root password for maintenance (or type Control-D to continue):
错误讯息指出 /dev/sda1 分割区有不一致性的问题!!
勒索病毒 (RansomWare) - 一种全新的商业模式
勒索病毒 (RansomWare)
近两年来出现一种新型态的电脑病毒:“勒索病毒”。(关键字: RansomWare、Crypt0L0ocker、CryptoLocker、CryptWall)
这种病毒会将受害人电脑里的文件类型的档案加密 (包含连结到 NAS 的档案),而受害人必须交付赎款才能取得解密程式。

由于病毒是使用很高阶的加密技术,受害人即使能删除病毒也救不回被加密的档案。防毒软件顶多能移除病毒,但仍无法解密档案! 因此只能选择交付赎款或放弃所有档案。
而台湾的受害人甚至必须到“全家便利商店”购买 BitCoin 来付赎款,就算请店员打 165 也没用!
唯有异地的档案备份才能解除危机。
这种“勒索病毒”严然成为了一种新的“商业模式”,并且已经做出了口碑,未来只会衍生出更多的变种病毒。
INFORMATION
![]()
我们解决了什么问题?我们创造了什么价值?

近期回响