美文网首页
security coding

security coding

作者: jaymz明 | 来源:发表于2018-12-15 14:46 被阅读0次

        最近公司开展了安全编码的培训,为期两天。安全方面的code意识(实战)一直很薄弱,听下来感觉还是有点感悟心得。授课老师是个印度人,暂不论口音啥的,语速也快。反正说的我只听懂了一半(汗颜.png),而且也遇到听力魔咒,当你发现你不知道一个单词的意思的时候,它就会一直出现在你的耳边,感觉老师每句话里面都有这个词。在此做个笔记,把还记得物化一下。

首先要赞扬的是下面这个游戏,老师带来的VM pack中集成的一个test 游戏,7个关卡,根据所讲的知识点,设置关卡,然后去完成对应的题目(找出编码过程中那些易被攻击的点)。

好了,言归正传。

有两个新鲜的名词(我第一次听说)Fail safe和Fail security。

初次看来,这两个词意思很近,但是还是有些不同。Fail safe定义的是失效保护。(e.g.大楼里面的断电逃生灯,还有各个门通道)。Fail security说的是那些需要用门卡的门,这些是做了安全认证的。网站系统中也需要做这样的设计,哪些是需要设计权限认证,哪些是可以应付DR的。

whitelist  and blacklist

whitelist和blacklist这个场景很常见,日常生活中手机通讯录,邮箱等都有应用场景。比如gmail邮箱就不允许用户发送exe文件,以此限制不安全文件的传输。那么我们设计一个上传功能的时候,需要设置whitelist,允许固定的几种文件类型通过校验,其余的则过滤掉。这样既保证了安全,又可以减轻校验的压力以及系统的不稳定。blacklist可以用来限制访问的客户端。

password 相关

password一直是个热点话题,涉及账户安全和个人隐私。目前主要的加密方式有MD5,RSA,BASE64, salt等。那么在设计的时候推荐使用目前市场上流行的加密,不建议使用自己设计(一方面校验繁琐,响应时间长,体验不好。另一方面没有经过市场考验,易脆弱)。主流的是一种salt的加密方式,salt的选取也是至关重要。【tips:java中的random或者date,time 这种作为seed,都是不安全的,并不能真正意义上的随机,可以使用secureRandom替代,然后salt一定要跟随着crential的变换而变换。】

注入攻击

普通的sql注入这个都了解,基本上都是硬写sql拼字符串导致的。

还有一种是OS command注入。比如这样:os.execute("ls " + command)。这样写法也是极易收到攻击。原先我的命令是用来获取当前目录下的文件信息。但是我把filePath= | cat /ect/passwd,是不是就可以获得到当前用户的密码了呢?

cross-site,也是一种注入,客户端脚本注入。一般嵌在html中。

file.getCanonicalPath()和file.getAbsolutePath()

linux系统中会存在会存在../../ 这样获取路径的方式,那么第一个方法取路径相对于第二种会把这种..去掉,这样可以避免攻击者通过../../../etc/passwd这种方式窃取用户信息。所以取绝对路径的时候还是用第一种java方法。

auditing and monitor

开发是时候最容易做的事就是在代码中嵌入log,log的要求目前最低遵循GDPR,当然还有其他的标准,涉及sensity的信息都要避免。

voliate在concurrency的应用

老师讲这个的时候其实是花了很大力气,画图,讲解时间也不少。可惜我们都没听懂他说的啥 ...只知道他做了实验,用2个线程跑程序,数字自加到200000,花了9s。但是用voliate,并开了9个线程,只花了2s。(cool)voliate告诉线程直接读取内存中的变量值...

还有些rule不太记得了。当然也说了些设计的时候需要多个层级就行校验。就像古代设置关卡一样,每一个关卡检验的东西不一样,充分信任前面层的校验,不做重复动作。还有设计安全的时候需要“量力”而行,最安全的不一定是最好的,切合业务开展。

相关文章

网友评论

      本文标题:security coding

      本文链接:https://www.haomeiwen.com/subject/vafahqtx.html