编写傻瓜式应用程序与编写性能

Vie*_*iet 1 performance insight

我偏向于编写傻瓜式的应用程序.例如,使用PHP站点,我使用JS验证来自客户端的所有输入.在服务器端,我再次验证.在两边,我都会对空虚和其他模式(电子邮件,电话,网址,号码等)进行验证.然后我删除恶意标签或字符,修剪它们(服务器端).后来我将输入转换为所需的格式/数据类型(string,int,float等).如果库仅用于服务器端,我甚至会给开发人员带来优雅降级的机会,并容纳对最差输入的容忍并将其标准化为可接受的输入(我已经预定义了一组可接受的输入).

现在我正在读一个半年前写的图书馆.我想知道开发人员是如此邪恶还是缺乏智商让我做了如此多的优雅退化,找到一切可能的机会让这些家伙变得正确,即使他们给出了糟糕的输入,严重损害了性能.或者我应该做最少的检查,并期望开发人员能够并且故意提供适当的输入?我对最终用户没有希望,但是我应该更多地信任开发人员并为他们提供更好的应用程序/库吗?

Wil*_*ley 6

常见的策略是在服务器上验证从客户端发送的任何内容,因为您无法完全确定您的客户端是否真的发送了它.您不希望"更多地信任开发人员",并且在此过程中发现您"更信任您网站的黑客".

自动修复无效输入可以像祝福一样诅咒 - 你基本上承诺接受无效输入作为有效您的协议的一部分(即,如果您进行更改以破坏您正在更正的无效输入,则在将来的版本中,它不再向后兼容已编写的客户端代码).在极端情况下,你可能会把自己画成一个角落.此外,无效调用往往会传播到新代码 - 人们通常会复制并粘贴示例代码,然后对其进行修改以满足其需求.如果他们复制了你在服务器上纠正的错误代码,你可能会发现你开始按比例增加越来越多的不良数据,并且让那些认为"看起来不应该是这样的新程序员感到困惑"是对的,但这是每个人都在使用的例子 - 也许我毕竟不理解这一点.