zip炸弹攻击 输入_攻击您的输入

zip炸弹攻击 输入

尽管我一直反对用Java用final来绘制所有代码 ,并且已经接受了在JavaScript中使用const的方便,因为它通常会迫使某些纪律成为免费代码,但是有一个潜在的规则可以使我想要到处都有更多的常量。

规则是一个函数应该返回一些东西 通过将所有变量都视为不可变的常量(包括函数的输入),可以在一定程度上执行此操作。 通过这种支持线程安全功能编程的方法,从结构上讲,您不太可能出现错误。

但是,有一些关于使用constfinal解决此问题的警告。

  • 有时,要求一个函数将其结果累加到一个现有的容器中(例如数组或映射)是很合理的,因为使用克隆方法来使一个新的容器返回很麻烦
  • 设置引用常量并不能保证不变性,因此您似乎很认真地使用常量关键字,但是仍然违反了一般原则

为什么函数应该返回某些东西

如果一个函数仅对其一个输入进行操作并返回一个值,则:

  • 它可能有一个责任
  • 非常容易测试
  • 更容易理解

相反,如果函数执行各种操作,也许在一连串的调用中转发到下一个,则很难理解,调试和测试……可能更难正确。 这样做可能还会浪费内存

攻击输入

尽管有这样的想法,我们可能(偶尔)将一个对象传递给一个函数,以便将值累加到其中。 我们应该研究如何避免修改输入参数。

  • 不要重新定义输入参数 –如果您需要对输入为第一个参数的对象进行迭代,请使用迭代来跟踪电流,而不是在循环中重写输入变量
  • 不要更改输入内容,因为这意味着您与呼叫者之间存在反向关系,后者可能天真地认为他们可以重复使用输入内容,但是不能-在某些情况下这是不可避免的,但是这些情况应该清楚地标明并且很少

一般规则是, 这是一个特殊的假设,您可以控制输入对象的状态

在最近的示例中,调用函数在列表上使用迭代器,而调用的函数同时接收当前项和迭代器。 该子例程正在从迭代器中删除项目以及使用当前项目。

尽管看起来可行,但我们无法向自己解释该算法为何起作用。

摘要

简短,可测试,单一职责,可测试的功能会明智地使用其输入。

翻译自: https://www.javacodegeeks.com/2020/02/attacking-your-inputs.html

zip炸弹攻击 输入