
在万圣节前夕,全栈开发人员Wes Bose在推特上发布了其他程序,以分享他们有关Webdev的恐怖故事。这里有一些...
@DimitroffPeter:
我的第一份工作,也是我对生产的第一份贡献。我需要修复客户端服务器实用程序。它的功能很简单:我们有一台来自路由器和PC的自制设备。路由器具有CLI,并应显示有关PC状态的信息。诸如systemctl,top,free之类的东西。该命令以文本形式发送,执行并以文本形式接收结果。但是,这是以最恐怖的方式完成的...
CLI命令以XML指定。他们使用特定参数调用Bash脚本。该脚本在文件系统上创建一个PIPE并将命令传递给它。服务器是用C编写的(这正是服务器向客户端发出请求的方式,而不是相反)。 C服务器上的所有变量名都由一个字母(x,a,b,q)组成,或具有一般形式(mem,data)。它还有许多pthread写入管道,并使用完全零线程控制在文件系统上对其进行轮询。没有互斥锁,没有类似的东西。
因此,C服务器线程轮询第一个管道并执行脚本,该脚本打开与PC的SSH会话并执行所需的命令。结果放置在文件系统中的另一个管道中。 C服务器有另一个线程对此管道进行轮询。以及一千个相关问题。例如,它无法以任何方式确定结果是否完整,并且不等待更多数据通过管道。他一读到东西,便立即显示出来。因此,获得了许多部分结果,并将它们的其余部分粘贴到下一个命令的结果中……
但这还不是全部。 C代码被散布了
fprintf(s)
。如果您熟悉函数系列printf
,您将意识到这只是在请求缓冲区溢出。他们拜访了我们。多次。
让我们再看看这个宏伟发明的架构/堆栈:
> CLI
>脚本SH
>管
>管调用并行线程
>脚本中调用并行线程
> SSH脚本
> SSH会话连接到PC
> PIPE 2
>另一个管道读取并行线程
我使用ncat将CLI之后的所有内容替换为30行Bash。

@MichaelDClaar
上一个项目将所有错误报告作为电子邮件发送给开发人员。一个小错误使我们收到了很多电子邮件,以至我们的电子邮件服务提供商确定了我们的帐户。半天之内,没有人可以向客户发送电子邮件。我们每分钟会向自己发送约5,000封电子邮件。
@dev__adi:
我为我们的网站创建了一个暗模式,但是没有为CSS变量添加默认值。我们应该将CSS主题文件添加到一个位置,并且一切都应该很好。事实证明,在另一个项目中,我们没有包含主题变量文件,并且所有内容都变为白色。幸运的是,在准备生产时就发现了问题。
@Abdullah_Mzaien:
在我的毕业设计中,我对它的大小感到非常恼火,因此我重新整理了文件。
创建了最奇怪的git命令之一,它将从头开始重新提交所有提交。
这没有错,但是所有这些承诺使我的团队感到恐惧。
@MathiasaurusRex:
大约10年前,我在排名前5的一家电子商务公司的锚标记变量中打了一个错字。假设它的地址是ABC dot com,所有锚标记都在AC dot com上。该错误传播到网站的每日/每周折扣部分。解决了几个小时。
相当昂贵的“哎呀”出来了。
@FcoGT:FcoGT
报纸留下了可能在事件发生后立即发布的重要新闻。加布里埃尔·加西亚·马尔克斯(GabrielGarcíaMárquez)病重时,他们已经在首页上留下了他去世的消息。我的一个朋友在条件语句中犯了一个错误并被张贴了!
@ryanfiller_:
我曾经
npm publish
在错误的文件夹中执行过,并将私有工作存储库作为公共包推送到npm中。幸运的是,npm unpublish
如果您足够快(72小时之内)注意到它,就会有一个团队。否则,它将永远呆在那里……
@perlilja:
一旦我在计算机上重新安装了系统。我以为我已经创建了代码的备份,但事实并非如此。一个月的工作丢失了。这也有一个好的方面:我认为新代码更好。
@petetasker:
我参加了一个广播节目比赛。创建了一个表格,用户可以通过该表格提交每周问题的答案。每周问题之一的答案中有撇号。本周未创建任何帖子……
@davigiroux_:
不是我的故事,而是一个令人恐惧的故事:与我一起工作的那个家伙更新了数据库,没有“ where”,这就是为什么每个订阅课程的用户都选择同一课程。我花了整整一个早晨来叫所有人,让他们上他们想要的课程,那个家伙说他病了。
@jonicious:
在我作为开发人员的第一份工作的头几周,另一个新手和我从运行最关键服务之一的计算机上删除了所有SSH公共密钥。
我还混淆了旗帜,
true
并false
关闭了广告活动,为所有客户提供50%的折扣。
@PatZawa:
我编写了一个正则表达式函数以在将其哈希到数据库之前验证社会保险号。但是,在执行验证之前,我忘记了反向解密,这就是为什么生产中从数据库中删除了近万名患者的原因。在接下来的两天里花了时间恢复并重新插入。
@nishant_ch:
在我职业生涯的开始,我曾经不小心通过Filezilla连接到错误的服务器,然后将其他人的网站上传到工作域,然后休息了。几个小时后,我发现所做的更改未反映在网站上,并且我意识到自己做了什么。
@pjately:
在办公室工作的第一天不小心关闭了服务器。直到我再次打开交换机,服务器发出启动声音,我什至没有意识到这一点,而技术总监转身问:“那是服务器吗?”工作的第二天好多了……不会再糟了。
@rrrrrrichard:我
在2000年代初写了一个赚钱的网站。我调试了联系页面,以为自己已禁用传递功能。那天,客户收到了来自“ Adolf G。”,“ Joseph S.”的大量电子邮件。等等几个小时后,他礼貌地让我停下来。哎呀。
起初,在委托人方面,他们认为自己受到某种愤怒的心理医生的攻击,因为信件的主体是庸俗的。然后,他们突然意识到有人访问了他们的网站,然后他们与我联系。道歉并吸取了教训。
@spencer_carli:
对我来说是新数据库。我当时正在对推送通知进行故障排除,在此过程中,我认为本地系统和生产系统之间存在差异。我发送了十几个测试推送通知,这些通知的刺激程度越来越高……
事实证明,不仅我,而且整个团队都收到了消息。有人告诉我团队中的每个人都收到了测试消息。饼子!好吧,好吧...公司是技术人员,每个人都了解所有内容。
但是随后,来自投资者的推文和电子邮件开始出现-消息不仅在团队内部传播,而且还传递给整个用户群。
糟糕...
那是我生命中的最后一次,我写了关于推送通知的肮脏/幽默/令人不屑一顾的测试消息。
@jeroenheijmans:
“请选中复选框,但您可以选择多个选项。”
@endlife:
2005年,我正在为一系列DVD租赁商店开发Web应用程序-它已从拨号所需的客户端/服务器应用程序迁移到单个在线应用程序。在发布当天,我发现从客户端数据库同步的中央数据库已被完全破坏。没有人测试过数据完整性。
分支机构的员工叫我:“我们看到系统中其他城市的人,但我们不在系统中。”
我花了一天的时间通过VNC连接到本地计算机,使用本地MySQL管理员创建数据库转储,并手动构建中央数据库。经过为期两天的系统调试后,所有这一切。
在那三天里,我听了大卫·鲍伊(David Bowie)的《我们跳舞》七十次。
@sillywampa:
我曾经在生产的MySQL数据库中更新了用户密码,但忘记添加构造
WHERE
,因此所有用户密码都更改了。 15分钟后,我们开始接收无法登录的公司客户的电话和电子邮件。
@sygint:
重新编写了表格以清理用户界面,这一个月以来阻止了在《财富》 500强公司的移动网站上添加新信用卡,可能是没有人从应用程序中添加新信用卡,因为我们没有收到投诉。初级开发人员已经注意到了该问题,即使是质量检查部门也不知道。
还有一次,客户端不服从我,并将损坏的模板推送到正在运行的服务器上。他们在一小时内损失了7万美元。这次离我还差得远,哈哈。
@marcelcutts:
在初创公司的炎热天气里,我创建了一个名为Zombies,Run!的游戏,该游戏在数百万付费玩家中非常受欢迎。有一次,由于积累了无数的技术债务,我复制并粘贴了错误版本的Django配置文件,并丢失了数据库机密。
当然,我是在生产中完成的,没有备份。意识到发生了什么事,我告诉了首席执行官,然后离开了办公室。我认为我们不能通过向每个用户发短信“你好,再付钱”来拯救公司,而我对技术债务的辩论感到厌倦。原来我是对的。
第二天早上,我躺在床上思考如何减少秘密的熵,发现由于我又犯了一个错误并将秘密插入终端,因此这一直是我的zsh历史。两个否定性是肯定的。
评论:我曾经玩过这个游戏,它有很多奇怪的错误。
@marcelcutts:并不奇怪,我是一个糟糕的开发人员。
@JosDeBerdt:
我有一个多站点系统,可以将内容从一个站点传输到另一个站点。在测试过程中,我没有注意到我在未指定页面ID的情况下跟踪了生产链接并启动了“更新内容”。每个站点上的所有页面都由一个单词“ testing”组成。那时是版本控制系统存在的日子,更改立即通过FTP传输到生产服务器。
@chrisalesant:
在我的第一个前端工作中,我被要求设计一长串电子邮件,因此我使用div,动画和flexbox创建了所有内容。大约两周后,营销部门进行了质量控制,并表示他们将在三天内从头开始制作表格和内联样式的所有内容。
蛋糕上的樱桃:该设计应该具有Outlook客户端的像素完美布局。

@johnhutch:
我曾为一家财富500强公司开发了一个专用的电子商务平台,数百名开发人员正在研究多个品牌的国际副本,其代码整天都在不停地推进。
因此,请想象一下我的恐怖……
当我收到一条消息,说我破坏了整个git分支/环境时。事实证明,进行合并时,我弄乱了我所在的分支(不要使用'。'伙计们。请务必明确包括分支名称)。
@MongooseDoom:
我使用Wacom数位板而不是鼠标,因为这对我来说更舒适。有一天,我无意间将一个文件夹拖到了生产服务器上的另一个文件夹中。我没有做过任何记录,所以另一个人花了很长时间才弄清楚。我做了两次。
在另一个下雨的星期五晚上,我不小心删除了一个SQL表。
当然,然后我发现我们的备份策略被破坏了。
幸运的是,这是在延迟加载时代之前的,最终我打开了一个包含400个值的标签,然后我手动插入了该标签。
我通常是一个不可知论者,但是我记得那天祈祷Firefox直到我在此页面上为所有值截图后才会崩溃!
广告
VDSina在Linux或Windows上提供安全的服务器-选择一种预安装的OS,或者从您自己的映像安装。
