王志勇 发表于 2018年09月23日 11:18
此时的问题是,英文版的CentOS系统+火狐浏览器,访问所有的UTF-8网页,如果有中文字符,依然显示乱码,乱码如下截图。(这个Linux版的火狐浏览器能修改编码为中文,可是修改之后浏览器会彻底死机。)
过去,大家都知道UTF-8是国际编码,理论上即使系统、浏览器没有安装相应的编码,也能正常显示各国的字符。以前我用了差不多六、七年的英文版XP系统,记得当时系统没有额外安装中文包,自带的英文版IE6,都可以正常浏览UTF-8的网页。可见,出现这种问题是Linux版火狐浏览器的bug。
由于这个bug的出现,那么国外的英文版、非中文版的手机,自带的浏览器、或者手机安装的其它浏览器,访问utf-8的中文网页,是否同样有可能显示乱码呢?是有可能的。
这个例子,说明UTF-8并非是真正的国际通用编码。
多年来,我也一直在utf-8和gb2312之间抗争,因为在数据库里,中文或全角字符utf-8会占用3个字符,gb2312(或gbk,都是ANSI 936编码)占用2个字符。理论上,在高并发时,gb2312的效率是utf-8的1.X~1.5倍。当时在程序作品里放弃gb2312而用utf-8的原因,只是因为别人都用utf-8,utf-8似乎看起来更专业的样子,仅此而已。
如今在新的网页项目里,同时有英文、中文版,且是潜在的流量型,我尝试采用utf-8和gb2312同时使用。运用$aa=iconv('UTF-8','GB2312//IGNORE',$aa);这个函数来自动实现两种编码的互相转换。用户看到的网页,英文版会自动变成utf-8,中文版自动变为gb2312或gbk。
关于HTTPS。
如前所写,HTTP/HTTPS密码防止泄密的新方案,HTML完全可以在用户提交密码前,通过JavaScript对这个密码进行类似md5加密,或者最好自创加密规则,用户输入明文密码A的这个<input>一定要放在<form></form>之外,这样不会被截获,因为它不发送。JavaScript将密码A经过加密,用document.all.password.value='……';这样的方式复制给<form></form>里的一个隐藏的<input>,服务器再将这个加密过的密码做相应的还原。
由于加密规则只有开发者知道,经过加密的数据即使不幸被截获,也是永远无法被逆向还原的。经过一次加密,已经无法被还原。
这个方案已经在我的程序里完成,我在程序里做了3-5次加密。
有了这种加密方式,HTTP实现了和HTTPS相同的安全功能。有这种显而易见的HTTPS方式仍然不安全:网站启用了HTTPS,但数据库里依然记录明文密码。
可见,HTTP在HTTPS安全性方面的不同,主要在于用户发送时的数据不同。而服务器是储存明文密码,还是经过加密的密码,则与HTTP、HTTPS无关,是否安全取决于网站的程序设计。
所以,如今HTTP并非想象中的不安全,HTTPS也并非想象中的安全。HTTPS会损失一定的服务器性能。另外,HTTPS免费的几乎没有,直接在主机上安装Linux系统“自带”的SSL,用户访问时还是会有个安全警告提示。收费版的SSL,价格远超过了网站自身的域名、主机。网络里大力推行SSL,是不是有SSL销售商在做推手?
当然,并不是说使用这些产品不好,有很多人的确很需要这些。这里想说的是,如果没有这些产品,依然能够对运转没有任何影响的情况。就像别人都用utf-8,自己也要用才跟得上潮流;别人都用https,自己也要用才不会落后;别人都用iPhone,自己也要用才不会落后等等。
记得2005年、2006年的时候,ASP是我的主力开发语言,我还在投入大量精力开发ASP。当时计算机系的朋友只因为这一点,直接说我外行,于是不得已投入了JSP。然而,后来发现最佳的web语言是PHP,它比ASP、JSP的语法都简单易读。
合适自己的,才是最好的。
顺便说一下iPhone和高版本安卓。
如果您是业内的设计师、程序开发者,使用iPhone,我很尊敬您,因为技术人员是最理性的消费者。iPhone在过去几年流行,有几个很重要的原因,一是拍照效果很好(几乎和专业的家用佳能相机效果一样),二是流畅,三是很酷(价格高的效应),四是周围人都在用。但缺点,一是系统封闭,二是价格太高。
前几天有人问,现在同样的价格,是买iPhone 6s,还是华为P20?iPhone 6s是两三年前苹果发布的最高端手机,如今的性能相当于国产的安卓千元机型。因此,当然是华为P20的性价比比iPhone 6s高。华为P20我没有用过,没试过它的拍照效果,但是几年前的OPPO A59S(我家人在用,真八核)的拍照效果和iPhone基本一样。华为P20的配置参数比OPPO A59S高。
而专业的家用佳能相机,2003年时佳能最高端的是A60、A80,价格分别为2000元、3000元人民币,如今比A60、A80配置高得多的佳能新款相机,价格在400~1000元的型号比比皆是。为了便于无线传输,数码相机与安卓系统融合,是必然趋势,像三星GC100、三星WB50F、S800c都是好几年前的产品了,但是拍出来的效果都是在iPhone所有机型之上的,它们价格比佳能贵不少,但是和佳能效果差不多,仅仅是多了个安卓系统。
安卓相机可以通过蓝牙、或ES文件管理器(可在安卓2.3系统或以上运行)来无线传输文件。因为这十几年里,现有的数码相机通过数据线来传照片,已变得严重落后、渐渐变得不科学了,因为数据口寿命很有限,很多数码相机一插数据线就会充电,对锂电池有一定的损害。因此,无线传输应该尽快在数码相机里全面落实。
今年又是手机大降价的一年。3+32、4+64配置的机型,前两年的价格在1500、1900元以上,现在6XX~9XX就能买到。这样的一个手机,如果自身的拍照效果好,那么已经足够用了。如果拍照效果不好,再配一个安卓数码相机,完全实现了苹果手机的功能。
高版本安卓
现在在售的手机,如果是一两年前的库存货,最低是安卓5.1,新手机都是安卓6、安卓8了。如果是安装微信、支付宝等常用APP,这些安卓版本感觉不到多少区别,甚至和安卓4.3、4.4一样,只是界面变酷了一点。系统的变化,多数人应用不到。
从安卓4.3、安卓4.4开始,流畅度的确有了不少提升。
但如果您对Root要求较高,那么目前最后的一个版本是安卓4.4,或安卓5.1。安卓6.0以上,已经无法Root。对于习惯Root手机的用户,使用这些高版本安卓的手机,需要一个适应的过程。无法Root,可能手机的安全性会提升一些,但是功能少了。
对于只有Root才能运行的软件,则必须选一台安卓4.4的手机。安卓5.1还有部分机型能Root,有的机型Root之后再重启,会自动删除Root软件。
厂家之所以封杀Root,可能是为了减少返修率。但对于需要Root的用户,造成了很大的不便。最基本的,Root Explorer等文件管理软件,无法操作系统文件,无法更换/system/media的内置铃声文件。
手机容量,一般的应用,微信、支付宝、淘宝,1+8G目前是足够用的,更不用说3+32、4+64的配置。很多人纠结买32G、64G,还是128G、256G的iPhone?手机不是用来存储大量数据的,因为手机可能会丢,手机的闪存随时会坏。实际的应用中,手机的闪存寿命可能远低于机械硬盘,因此需要及时把手机里的数据挪到硬盘,重要数据做双重备份。
安卓手机的品牌,现在较多人用华为、OPPO、VIVO等等,对于外形、上档次、炫酷有需求,选这些完全没问题,三星手机现在似乎使用的人少了,可能是由于前年三星Note手机电池爆炸。(受这个事件的影响,从那时起,全球的TF、SSD闪存、内存条都涨了一倍,直到现在2年多才刚刚回落到当时的价格)
但也有明智的人,会选择小众的良好品牌,它们和那些热销的品牌其实很多是一样的、甚至更好用,价格便宜了一半以上。不推荐中(隔开)兴、酷(隔开)派,因为有多个机型,即使是现在较新的型号,都会偷发短信。
我喜欢海信手机,家里有台HiSense的冰箱用了9年,没想到海信手机是难得的国产良心之作,主要是它大部分机型都能三键强刷机,自带来电防火墙,用来上网绝对很好用,唯一的缺点是一些机型的拍照差一些。安卓4.4以前的海信手机很好用,但是自从安卓5.1之后就没有优势了,因为安卓5.1之后的刷机包,体积到了1.7G,容易刷机变真砖。
高版本的安卓手机,由于刷机包太大,刷机风险很大。800M以内的刷机包,都能安全刷机。
安卓手机,如果不能Root,对于稍微喜欢折腾、DIY手机的用户来说,基本就是个半废品,安卓4.4的时候,很多手机还能Root。安卓5.1已经在逐渐禁止Root,因为Root之后的手机,重启之后会自动去除Root。安卓6.0以后的手机彻底无法Root。所以,经典的手机,目前只停留在安卓4.4版本。
自由勇 2019-05-31 11:01
Hi!JS的代码可以完全隐藏,因此加密规则可以做到只有开发者知道。
自由勇 2019-05-31 11:05
完全隐藏JS程序的方法:
<script src='abc.php'></script>
abc.php的开头写入如下这段,原理是先禁用缓存,然后判断abc.php的所在域名、访问来源的域名必须相同,则为站内引用。
因为如果是站外引用,则来源的域名会不同;或者直接用浏览器访问abc.php,则来源为空。
因此,这个方法可以完全隐藏JS程序:
<?header('Cache-Control:no-cache');
$h=explode('.',$_SERVER['HTTP_HOST']);$i=count($h);$domain=$h[$i-2].'.'.$h[$i-1];
$i=parse_url($_SERVER['HTTP_REFERER']);$b=$i['host'];$h=explode('.',$b);$i=count($h);$a1=$h[$i-2].'.'.$h[$i-1];if ($a1!=$domain) exit();?>
……
在这之后写入的所有内容均为隐藏。
自由勇 2019-06-13 21:03
好的,我再测试一下。
自由勇 2019-06-14 10:27
昨天试了一下,应该是看不到的,我用的是火狐浏览器,不知道你用的环境是哪个浏览器?
2楼的程序应该是可行的,因为我用这样的方式已经将近10年。它的原理是,header('Cache-Control:no-cache');语句避免被浏览器缓存,防止被复制JS文件。
这个JS动态文件,由于没有缓存,理论上应该类似从内存读取。
用判断访问来源和自身文件的域名是否一致,因为这个JS文件没有被缓存,直接访问时,访问来源为空,所以不显示内容。
早期我是用这样的方式判断:(2楼的程序修改)
<?
if ($a1==$domain){
// 这里写入隐藏的内容
}
?>
后来为了减少最后的括号,以减少程序的逻辑,直接改为
if ($a1!=$domain) exit();
hide-js.php:
表单页右键看源码,看到hide-js.php的链接,点击后直接显示出其底部的js。
自由勇 2019-06-15 07:51
base64我昨天还原了一下,没有成功。
JS文件可以只写入加密规则(这样应该无法被右键看源代码),表单可以明文写在父页或者新建一个JS文件。
自由勇 2019-07-03 09:13
我最近开始开发PHP 7,上述程序在PHP 7有时候可能会有报错(比如非引用而直接访问这个动态的JS文件),需要把$i=parse_url($_SERVER['HTTP_REFERER']);改为:
$i=parse_url(@$_SERVER['HTTP_REFERER']);。
自由勇 2019-10-11 09:05
可能现在的免费证书多了一些,去年的时候基本上只有Let’s Encrypt。
自由勇 2019-10-10 22:33
那很不错,谢谢推荐!
自由勇 2019-12-23 21:47
是的,我现在也是在XP系统下用这个SS+.NET 4.0,能用,偶尔登录Gmail时用一下。
是的,原因是因为CentOS中没有中文字体。
不过,理论上因为UTF-8是通用编码,即使没有安装各国字体编码,也能正常显示。(正文的事例说明仍然需要安装各国编码。)
浏览器端提交的数据:
1、pwd:md5(md5('输入的密码') + 当前时间戳)
2、time:当前时间戳
服务端:
if(time() - $_POST['time'] < 3){
$pwd = ...//获取数据库中保存的密码的MD5值
if(md5($pwd.$_POST['time']) === $_POST['pwd']){
//登录成功
}else{
//密码错误
}
}else{
//登录超时
}
抱歉,评论已关闭。
置顶的文章:
论朋友圈可以发什么?
短信验证开发的方案分享
巡回更新:2018-09-21
速度是永恒的主题
UTF-8、HTTPS原来都是浮云
https安全吗?
独立博客有必要安装https吗?
近期的主题:
夜晚靓歌(10):你没看过的《星雨心愿》
Feedval、Blogval将下线/谈理财和生存
2024.9感言
人生讨论(20):有人借钱怎么办?(2)
人生讨论(19):迄今为止最强的情感频道
数码评测(67):让小米/红米手机的反应提高1~2倍
数码评测(66):无线网卡FW150UH VS FW150UH
数码评测(65):如何快速自制CPU天梯图?
数码评测(64):2024年,你还在用VGA线吗?
人生讨论(18):6年就可以实现财务自由
人生讨论(17):为什么总是受欺负?
人生讨论(16):要钱的最新妙招
创业杂谈(17):什么项目能赢利?
人生讨论(15):有人借钱怎么办?
数码评测(63):高清切换超级神器
数码评测(62):再谈视频的尺寸
数码评测(61):近期数码采购和折腾
人生讨论(14):看穿尊重
数码评测(60):图拉丁-最佳中配工作“免费”手机
创业杂谈(16):博客何时终结?
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +