对于编程开发程序员来说,除了需要完成软件编程工作以外,同时也需要增加一些基础的信息安全措施。
今天我们就一起来了解一下,提高服务器安全等级的安全措施都有哪些类型。
深度防范深度防范原则是安全专业人员人人皆知的原则,它说明了冗余安全措施的价值,这是被历史所证明的。
深度防范原则可以延伸到其它领域,不仅仅是局限于编程领域。
使用过备份伞的跳伞队员可以证明有冗余安全措施是多么的有价值,尽管大家永远不希望主伞失效。
一个冗余的安全措施可以在主安全措施失效的潜在的起到重大作用。
回到编程领域,坚持深度防范原则要求您时刻有一个备份方案。
如果一个安全措施失效了,必须有另外一个提供一些保护。
例如,在用户进行重要操作前进行重新用户认证就是一个很好的习惯,尽管你的用户认证逻辑里面没有已知缺陷。
如果一个未认证用户通过某种方法伪装成另一个用户,提示录入密码可以潜在地避免未认证(未验证)用户进行一些关键操作。
尽管深度防范是一个合理的原则,但是过度地增加安全措施只能增加成本和降低价值。
小权限我过去有一辆汽车有一个佣人钥匙。
这个钥匙只能用来点火,所以它不能打开车门、控制台、后备箱,它只能用来启动汽车。
我可以把它给泊车员(或把它留在点火器上),我确认这个钥匙不能用于其它目的。
把一个不能打开控制台或后备箱的钥匙给泊车员是有道理的,毕竟,你可能想在这些地方保存贵重物品。
但我觉得没有道理的是为什么它不能开车门。
当然,这是因为我的观点是在于权限的收回。
我是在想为什么泊车员被取消了开车门的权限。
在编程中,这是一个很不好的观点。
相反地,你应该考虑什么权限是必须的,只能给予每个人完成他本职工作所必须的尽量少的权限。
一个为什么佣人钥匙不能打开车门的理由是这个钥匙可以被复制,而这个复制的钥匙在将来可能被用于偷车。
这个情况听起来不太可能发生,但这个例子说明了不必要的授权会加大你的风险,即使是增加了很小权限也会如此。
风险小化是安全程序开发的主要组成部分。
你无需去考虑一项权限被滥用的所有方法。
事实上,你要预测每一个潜在攻击者的动作是几乎不可能的。
简单就是美复杂滋生错误,错误能导致安全漏洞。
这个简单的事实说明了为什么简单对于一个安全的应用来说是多么重要。
没有必要的复杂与没有必要的风险一样糟糕。
暴露小化PHP应用程序需要在PHP与外部数据源间进行频繁通信。
主要的外部数据源是客户端浏览器和数据库。
如果你正确的跟踪数据,你可以确定哪些数据被暴露了。
Internet是主要的暴露源,这是因为它是一个非常公共的网络,您必须时刻小心防止数据被暴露在Internet上。
数据暴露不一定就意味着安全风险。
可是数据暴露必须尽量小化。
例如,一个用户进入支付系统,在向你的服务器传输他的信用卡数据时,你应该用SSL去保护它。
如果你想要在一个确认页面上显示他的信用卡号时,由于该卡号信息是由服务器发向他的客户端的,你同样要用SSL去保护它。
比如前面的例子,显示信用卡号显然增加了暴露的机率。
SSL确实可以降低风险,但是佳的解决方案是通过只显示后四位数,从而达到彻底杜绝风险的目的。
为了降低对敏感数据的暴露率,广西电脑培训http://www.kmbdqn.cn/认为你必须确认什么数据是敏感的,同时跟踪它,并消除所有不必要的数据暴露。
在本书中,我会展示一些技巧,用以帮助你实现对很多常见敏感数据的保护。
我们在开发过程中,肯定会有和第三方或者app端的接口调用。在调用的时候,下面的方法可以来防止非法链接或者恶意攻击。
一、签名
根据用户名或者用户id,结合用户的ip或者设备号,生成一个token。在请求后台,后台获取http的head中的token,校验是否合法(和数据库或者Redis中记录的是否一致,在登录或者初始化的时候,存入数据库/redis)
在使用Base64方式的编码后,Token字符串还是有20多位,有的时候还是嫌它长了。由于GUID本身就有128bit,在要求有良好的可读性的前提下,很难进一步改进了。那我们如何产生更短的字符串呢?还有一种方式就是较少Token的长度,不用GUID,而采用一定长度的随机数,例如64bit,再用Base64编码表示:
var rnd = new Random()
var tokenData = userIp+userId
rnd.NextBytes(tokenData)
var token = Convert.ToBase64String(tokenData).TrimEnd('=')
由于这里只用了64bit,此时得到的字符串为Onh0h95n7nw的形式,长度要短一半。这样就方便携带多了。但是这种方式是没有唯一性保证的。不过用来作为身份认证的方式还是可以的(如网盘的提取码)。
二、加密
客户端和服务器都保存一个秘钥,每次传输都加密,服务端根据秘钥解密。
客户端:
1、设置一个key(和服务器端相同)
2、根据上述key对请求进行某种加密(加密必须是可逆的,以便服务器端解密)
3、发送请求给服务器
服务器端:
1、设置一个key
2、根据上述的key对请求进行解密(校验成功就是「信任」的客户端发来的数据,否则拒绝响应)
3、处理业务逻辑并产生结果
4、将结果反馈给客户端
三、第三方支持
比如spring security-oauth
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)