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

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

在这种情况下您会怎么做?在网站上发现了一些可能的安全漏洞。我指出了这一点,并说那里的SQL注入攻击可能存在一个漏洞,并询问他是否知道。他回答:“当然,但是我认为,要利用它,攻击者应该掌握有关数据库结构的信息;我必须更好地理解”。

更新2:

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

评论

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

攻击者可以利用该漏洞获取有关数据库结构的信息。绝不应该轻视SQL注入漏洞。

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

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

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

#1 楼

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

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

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

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

评论


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

–MaiaVictor
13年5月5日在7:07

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

–科尼拉克
13年3月6日在8:28

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

–埃里克·希德里克(Eric Hydrick)
13年3月6日在15:59

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

–nalply
2013年3月7日19:28



#2 楼

无知和无能之间是有区别的。曾经有一段时间您也不知道什么是SQL注入,并且没有理由相信原始程序员一旦意识到这些问题就无法解决问题。告诉他们。要明确,客观,并让自己可以回答问题,提供漏洞利用示例以及修复建议。如果他们在那之后仍然没有得到信息,那么您真正能做的就是不要在网站上放置任何个人信息。

评论


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

–米奇小麦
13年5月5日在2:01

#3 楼

您的工作不是为他重做网站。这是为了修复小错误。但是,如果您发现了应该解决的安全问题,则可以与网站所有者联系,并提供有关问题可能出在哪些方面的见解。

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

#4 楼

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

随着修复程序的发展,您需要从安全的角度给他们列出您注意到的错误的原因,以及为什么这些错误的原因。

#5 楼

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

在这种情况下,强大的软技能会派上用场,因为它能以轻快的方式处理,这将不需要放下其他人在网站上所做的工作,也不会让开发人员觉得自己像在质疑他的才华。

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

评论


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

–安德鲁·格雷(Andrew Gray)
13年4月4日在19:38

#6 楼

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

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

评论


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

–deworde
13年6月6日在10:14

#7 楼

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

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

问题与SQL注入一样根本当他们最初开发该系统时,它们很便宜,现在它们充其量也很便宜。当他们还在经营时,可以从他们那里得到什么,但是在其他地方寻求业务发展。

评论


“管理层不希望听到有关问题的信息”-添加一些推理/参考来支持您的断言(这对我来说似乎很合理,但这并不重要),我将撤消不赞成

– gna
13年5月11日在22:19