您被雇用为一个安全性高的网站修复一个小错误。查看代码,其中充满了安全漏洞。你是做什么?[关闭]


109

我被某人雇用在网站上做一些小工作。这是一家大型公司的网站。它包含非常敏感的数据,因此安全性非常重要。在分析代码后,我注意到它存在安全漏洞-读取大量PHP文件,将用户获取/发布输入直接扔到mysql请求和系统命令中。

问题是,为他创建站点的人是一位程序员,有家人和孩子依靠这项工作。我不能只说:“您的站点是一个脚本儿童游乐园。让我为您重做一次,一切都会好起来的。”

在这个情况下,你会怎么做?

更新:

我在这里遵循了一些好的建议,并礼貌地向开发人员报告说,我在网站上发现了一些可能的安全漏洞。我指出了这一点,并说那里的SQL注入攻击可能存在一个漏洞,并询问他是否知道。他回答:“当然,但是我认为,要利用它,攻击者应该掌握有关数据库结构的信息;我必须更好地理解”

更新2:

我说并非总是如此,建议他遵循此Stack Overflow问题链接以正确处理它:如何防止PHP中的SQL注入?他说他会研究的,并感谢我以前告诉过他。我想我的工作已经完成,谢谢大家。


29
我真的很喜欢不破坏他人生活的解决方案。我不理会这个问题,但我也知道,这样的安全漏洞也可能毁坏某些人的生活。复杂。
MaiaVictor 2013年

18
攻击者可以利用该漏洞获取有关数据库结构的信息。没有SQL注入漏洞应该永远被低估。
Dave Rager 2013年

17
向他展示如何在不使用任何数据库知识的情况下利用某些漏洞。那会吓到他。
欣快感2013年

74
我只是想说一个好工作,可以寻找另一个您不认识的人/程序员。破坏他们的生计并不是一件可怕的事情,因为他们犯了一个错误,而您却不认识他们,我赞扬您考虑到这一点。
钢铁

8
@Dokkat问题是平衡之一。从程序员的角度来看,有妻子和孩子的劣质程序员实际上已经威胁到公司,因此,许多有妻子和孩子的员工的工作也受到了威胁。同样,由于“不良的程序员所做的事情使我的生活变得更加艰难。现在我不得不错过与家人在一起的时间。这对我来说比他更重要。这似乎不公平。” ” 那是一个非理性的反应,但是人是人。
deworde

Answers:


114

首先,这里的首要任务是关闭安全漏洞。

如果您直接与编写此文档的工程师合作,请记录所有内容并将其交给该工程师。

如果不是,请告诉您的雇主,安全问题比最初想象的要大,并且该站点需要大量工作。要求与该站点上的主要开发人员合作,并提供教他们有关PHP安全性的信息(不要保证让此人成为专家,但会提供对他们进行一切已知知识的培训),以便该人可以接管完成后。

不要把这个当作“这个家伙是坏人,开除他”的问题。从“嘿,我发现了一些需要修复统计信息的潜在错误,这些错误似乎来自对站点安全性的一些无知/常见误解。我也想与您谈谈,以便我们改善您的网站并希望将来避免更多此类问题。”


1
总体来说,答案很好。该主题是主观的,因此我将其标记为社区最认可的主题。
MaiaVictor

1
如果您正在与工程师一起工作,但由管理人员支付工资,您是否不应该向管理人员报告?如果工程师感谢您,但是您离开的那一刻破坏了报告怎么办?
Konerak

要么两者都告诉,要么先告诉工程师,然后验证是否在他们使用的任何系统中创建了bug并对其进行了跟踪。如果未创建错误,请告知管理层。
Eric Hydrick

2
我更喜欢这个答案:programmers.stackexchange.com/a/189206/28351,因为对于雇主而言,优先级是不同的。首先报告安全漏洞,然后修复小错误。
2013年

80

无知和无能之间是有区别的。曾经有一段时间您也不知道什么是SQL注入,并且没有理由相信原始程序员一旦意识到这些问题就无法解决问题。

所以告诉他们。明确而客观,让自己可以回答问题,提供漏洞利用示例以及修复建议。如果他们在那之后仍然没有得到信息,那么您真正能做的就是不要在网站上放置任何个人信息。


26
+1。无知可以解决。无能是某些人的职业!
米奇·

20

您的工作不是为他重做网站。是修复小错误。但是,如果您发现应解决的安全问题,则可以与网站所有者联系,并提供有关问题根源的见解。

不要对原始开发人员感到rate惜或负面评价,也不要对代码的可怕程度发表评论。要尊重和专业。您可以提供与开发人员一起解决问题的方法。除非已与您签约解决该问题,否则请勿尝试自己修复或提供解决方案。如果他们遵循您的建议,但您错了,他们可能会再来找您。


17

首先-修复他们雇用您的东西。如果您不这样做,那么您将被视为那种对自己做更多工作而不是完成工作感兴趣的顾问。

除了这些修复程序,您还需要向他们提供从安全角度来看您发现错误的内容的列表,以及为什么这些错误的原因。


13

不报告问题对任何人都没有好处。如果您有特定的任务,则需要雇用您完成该任务,但要记录其他安全问题,并在看到它们时将其报告给适当的个人,可能是您要为其雇用的任务向其报告的个人。

在这种情况下,很强的软技能会派上用场,因为要轻巧地处理这些问题,就不需要放下现场其他人所做的工作,也不要让开发人员觉得自己在质疑他的才华。

在提及代码/缺陷时,显然应避免使用诸如“废话,坏,差,混乱”之类的词语,而对于编写该网站的开发人员,应避免使用类似的词语。


4
我要补充一点:确保开发人员知道漏洞的严重性以及如何利用这些漏洞。花些时间在有一名开发人员在场的情况下在本地计算机上启动受控的“攻击”,可以使他对问题有很多了解,这为您提供了一些方法来加强代码。
安德鲁·格雷

7

除了其他答案之外,您可能想做的是将开发人员指向可以轻松利用SQL注入问题的一些资源,例如sqlmap,它是一种自动SQL注入利用工具。

我发现过去在证明这种问题的严重性方面有效的方法是显示可以解决的问题,因此,如果您对开发人员执行类似的操作。该网站的副本以显示其提取数据等信息,您可以说服他们这样做的重要性。


4
请注意,这样做有一定的风险,因为您可能会像个“黑客”。管理人员不一定理解“现有漏洞”,“开发副本”和“白帽安全分析师”之类的
词-deworde

0

首先也是唯一 管理层不想听到有关问题的消息。我被人事管理办公室(白宫的安全检查)开除了,因为我指出他们的系统是多么不安全。那是一段时间了,但是管理态度没有改变。

通过电子邮件与开发人员联系,以解决问题,然后走开或走开。当他们最终确实有问题时,作为承包商,他们会尽力怪罪您,无论涉及到什么问题,甚至涉及到任何远程问题。

遇到像SQL注入这样基本的问题,表明它们在最初开发该系统时很便宜,而现在它们充其量也很便宜。当他们还在经营时,从他们那里获取可以得到的一切,而在其他地方寻求业务发展。


3
“管理层不希望听到的问题” -添加一些推理/引用来支持你的说法(这听起来有道理的我,但这个并不重要),我将取消downvote
蚊蚋
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.