您在编码时会积极考虑安全性吗?


9

在进行编码时,您是否积极考虑可能会以原本不该使用的方式利用您的代码,从而获得对受保护信息的访问,运行命令或您不希望用户执行的其他操作?


什么时候编码?我做了很多不同的事情。
David Thornley,2010年

9
是的,经常。通常用类似于“该死,我没有时间,希望没人能找到”的短语。
liori

Answers:


10

有点儿。免责声明:我是安全人员;)

因此,我的工作方式就是拥有威胁模型,该模型描述了可能由哪种攻击者进行的攻击。这有助于确定安全性要求。当我实际进行编码时,我会执行通常的“安全编码”操作,例如要小心,确保游标变量始终在范围之内,清理污染的输入,处理错误条件。然后,我返回到威胁模型,以查看哪些模块最有可能成为攻击者的目标。那些得到一些额外的评论。


4

我使用行业标准的做法,例如使用SQL参数。我使用.NET Framework等“安全”平台,并利用ASP.NET MVC中的安全功能(如防伪令牌)。我没有编写自己的加密算法,但是我确实了解这些加密提供了哪些安全益处,以及何时需要使用它们来获得这些安全益处。

简而言之,我使用最佳做法,但是我没有开发自己的安全工具。在这方面,我不是安全专家;我依赖其他安全专家,他们大概已经对这些问题进行了深思熟虑,并对风险和收益有清晰的了解。

除了简单地使用安全工具之外,我对安全性的基本方法是消除系统中所有可能的输入,除了我所期望的。如果我有一个社会保险号字段,那么实际上应该显示的唯一字符是数字和破折号(以特定的模式)。

我在客户端和服务器上都验证用户输入。


我同意使用内置的安全功能,但是您一定要考虑何时以及如何使用它们。我不得不说,我担心依赖他人来考虑产品的安全性。他们还没有这样做。
迈克尔·肖

@Ptolemy:何时适合参数化SQL语句?什么时候适合使用防伪令牌?如果数据敏感,什么时候适合使用加密?
罗伯特·哈维

让我们考虑一下加密。第一个问题,您使用哪种加密?使用较差的加密会带来错误的安全感。在某些时候,您必须解密数据。在什么时候执行此操作,与代码的复杂度相比,这样做有什么风险?加密实际上为您提供什么实际保护?您的dll字节码是否已加密,或者可以从DLL中读取加密密钥?这就是为什么,仅仅很少或根本不了解功能就很危险。
迈克尔·肖

@Ptolemy:如果这就是您想到的安全性,那么我同意,您必须真正了解这些内容才能正确使用这些工具。
罗伯特·哈维

3

绝对。

安全就是一切。而使用数值软件,它可以执行两次。
就在前一天,一个用户设法找到并利用了我的一个旧程序中的错误。损害是无法弥补的。见下文:

替代文字

它曾经是圆形的。


7
这需要进一步的解释:)
Toby Allen 2010年


2

不可以,因为我不在涉及安全性的问题域中工作(大规模数据可视化软件)。我的代码中确实有很多断言(索引检查,一致性检查等),并不是出于安全考虑,而是因为我喜欢错误的代码尽早崩溃并明显崩溃。


1

绝对。我考虑了注入漏洞,还考虑了我的业务逻辑在桌面环境和Web环境中如何工作,以及在两种类型的环境中如何实现安全性。


1

我不是安全专家,但是当我为Web应用程序编码时,我总是假设用户输入可能包含各种奇怪的东西,并且应该始终完全避免此类输入。另外,在使Ajax回调到服务器以检查用户是否已登录(如果他们应该针对该特定事件)以及他们是否有权执行其尝试执行的操作时,我非常小心。

代码库具有一组输入过滤器。我从不直接检查PHP $_GET$_POST数组。相反,我询问他们通过函数Request::get('parameter', 'filter')使用过滤器,例如inttext和其他几个人。(Request::post()当然,对于POST输入。)


1

是。当我从事多人游戏时,所有人都对漏洞利用和作弊方式抱有幻想。作弊可能会彻底破坏游戏,更不用说与销售游戏内物品有关的任何商业模式了。因此,安全问题和防篡改措施已被提上议事日程。我很喜欢它。我曾在其他项目上工作过,在那之前您不得不为确保代码的安全性而对代码进行更长的工作而感到内gui。


0

是。安全很重要,不应该事后考虑。通常,在事实之后添加安全性比首先在应用程序中设计安全性要困难得多,如果以后再添加它,您可能会错过一些事情(或者根本不用去添加它)。


0

了解安全性的一般原理(完整性,身份验证,授权),然后阅读几本关于人们如何颠覆这些安全性支柱几千年的书,而您将到达一半。

然后阅读一些有关设计和测试策略的好书,您将学习如何将可测试性设计到您的体系结构中。

现在我们到了考虑安全性的地步。我正在考虑如何验证数据源,如果数据被篡改不重要,数据源是谁,我对此有多确定?怎么会改变等等...

这会影响设计。配置文件可能已加密了关键部分,或者特定字段可能是带有关联签名字段的明文形式。面对互联网的服务会使事情变得更加复杂,因为您应该期望那里的敌对程度更高。

然后在测试时,如何测试所有这些。最大数据输入是多少,如果将软件推超出这些限制,会发生什么情况,软件将如何处理?它信任什么?您如何伪造这种信任?


0

是。

过去,我与足够多的黑客打交道,以了解他们一直在试图入侵任何大型站点,并且那里有足够多的僵尸程序甚至很小的站点也不安全。

现在,我一直试图像黑客一样思考,以至于有时我会担心同事们随意评论我们每天如何看待系统。


0

它应该是任何开发人员从头开始或多或少从根本上构建到流程中的东西,具体取决于应用程序等。不幸的是,由于开发人员不倾向于引用安全性,因此购买者不倾向于考虑它(我知道,这有点赶不上22,因为如果买家想要最便宜的报价,则可能不包括担保)

作为开发人员,如果您精通此领域,则可以获得绝对的优势-我特别在考虑银行和金融服务,但其他行业也适用。目前,他们可能会预算70至10万美元的培训费用来培养一名应届毕业生,以加快该组织的流程,安全性和其他细节。如果您可以将其中的30k保存下来,那将是一个不错的简历!

在英国,信息安全专业人员协会和在苏格兰,安全与网络犯罪卓越中心正在与大学紧密合作,以帮助审查课程资料,提供有关编码不良对现实世界的影响的客座讲座,并为暑期实习提供方便(例如软件开发人员被置于执法部门的欺诈部门。)大多数支持组织都是免费这样做的,因为它有可能为他们节省大量金钱-对我来说听起来很有价值。

(免责声明-我曾担任各种全球组织的安全负责人)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.