Php 在实现了web应用的主要功能之后,在web应用中实现安全性是否合理?

Php 在实现了web应用的主要功能之后,在web应用中实现安全性是否合理?,php,security,xss,csrf,methodology,Php,Security,Xss,Csrf,Methodology,请原谅,如果这似乎太模糊,无法张贴在Stackoverflow上 我的公司雇佣了三名开发人员使用PHP和MySQL实现一个分类广告系统。他们已经工作了一个多月,没有使用框架(他们反对使用框架),基本功能已经实现(用户注册和认证、广告列表和过滤等)。但是,粗略的测试表明,系统容易受到常见恶意攻击(CSRF、XSS、本地文件包含) 在检查代码之后,我意识到他们没有在服务器端实现数据验证过程(他们只使用正则表达式验证邮件地址,使用mysqli_real_escape_string()清理字符串以防止S

请原谅,如果这似乎太模糊,无法张贴在Stackoverflow上

我的公司雇佣了三名开发人员使用PHP和MySQL实现一个分类广告系统。他们已经工作了一个多月,没有使用框架(他们反对使用框架),基本功能已经实现(用户注册和认证、广告列表和过滤等)。但是,粗略的测试表明,系统容易受到常见恶意攻击(CSRF、XSS、本地文件包含)

在检查代码之后,我意识到他们没有在服务器端实现数据验证过程(他们只使用正则表达式验证邮件地址,使用mysqli_real_escape_string()清理字符串以防止SQL注入)。他们实现了一些验证例程,但在客户端使用JavaScript。显然,这是UI的一部分,不提供任何针对恶意用户的安全性

他们认为,由于三个开发人员不足以从头开发一个完整的Web应用程序(我同意),他们将首先实现功能,然后适当地保护它们,以满足特定的期限。无论如何,我都不是一个有经验的程序员,但我相信要实现安全性,需要更长的时间。此外,如果他们设法做到了这一点,那么与从一开始就实现的数据清理例程相比,这将是不理想的


所以,我的问题是:(i)在实现特性之后实现安全性(即,至少实现适当的消毒例程)是合理的吗?(ii)如果(i)的答案是“否”,您会推荐什么书目、安全框架(但我猜它们本身就嵌入到web框架中)等来管理安全性处理不当的项目?

以后实施安全性确实不合理

<>它可能不再需要,或者是低于标准杆,它可能会更快更好。问题是,它可能根本不会被完成,因为该项目将推迟和超出预算


我对不使用框架的决定感到惊讶,这看起来像是一个使用Rails、Symfony或Django的1人周工作,安全性也会被考虑进去。

在开发阶段,安全性应该一直被考虑在内,如果过度关注/忽略了它,那么应该在第一个可用实例上构建对开发中的API的改进

您最不希望做的事情是向公众发布一个脚本,该脚本本身的代码结构中存在许多安全/恶意漏洞

因此,我建议通知这些开发人员查看他们的工作,并对已经制作的API进行适当的更改,以提高安全性

如果忽略了安全方面而不进行修改,则项目可能会延迟完成并超出预算。。最好在为时已晚(当你已经被释放到公共交通中,并且面临比预期更长的下降时间时)之前迎面接近这一点


总的观点。。在它成为严重问题之前,把它钉在屁股上

不,由于多种原因,在项目完成后实施安全性是不可接受的。首先,正如已经提到的,无论是谁承担这项费用,都不太可能在他们已经拥有他们想要的产品的情况下继续支付实现安全功能的费用。第二个原因是,与第一次正确编写代码并在编写代码时实施任何安全措施相比,他们需要花费更长的时间来查找所有安全漏洞。这样做也会更容易,因为您可以编写安全库,它可以为您执行诸如转义数据之类的操作,这样,通过对转义函数/方法进行简单调用,编写代码就变得流畅了。第三个原因是,他们绝对不可能通过查看代码找到所有漏洞。编写没有安全漏洞的代码已经够难的了(几乎是不可能的),更不用说重新检查代码并找到所有这些安全漏洞了

至于一个建议的框架,我真的没有,因为我也从来没有使用过框架,只有我以前写过的要使用的库。然而,归根结底,这只能找到优秀的开发人员,而不是那些说他们可以以超低的价格完成开发的人。PHP开发人员池中充满了这些半途而废的开发人员,我要说,相当多的开发人员更喜欢预先制作的框架。诀窍是从一开始就找到一些好的。要保护编写得如此糟糕的应用程序的安全,您唯一的选择是获得WAF(web应用程序防火墙),并让它过滤发送到服务器的任何恶意内容。但对于编写糟糕的代码来说,这并不是一个灵丹妙药。我甚至不称它为创可贴,更像是冰雹玛丽。
最后一件事是,我非常不同意他们人手不足,有3个人在写这篇文章。4年前我自己写了一些类似的东西(好吧,有一个html的家伙),用了不到3个月的时间。在这3个月里,有两个月是完全重写部分,因为一旦完成,客户会改变主意,再加上写一些附加功能,使其更像是一个社交网络,而不是一个分类网站。如果我能在这段时间内自己完成大部分工作,他们应该能够在一个半月内用3个人轻松完成(并确保安全)。

在开发的后期处理安全问题并不是不合理的,只要这只是一个实现问题,而不是设计的根本缺陷。没有“更安全”或“更不安全”这样的东西。系统是安全的还是不安全的。必须考虑应用程序作为一个整体的行为。因此,处理这些问题并不是那么有利可图