问题标签 [defensive-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
497 浏览

javascript - 在深度防御故障或代码混乱妄想症的程序中是否有多层数据验证?

例如,当最初输入数据时,如果它与我的验证正则表达式不匹配,我可能会将其吐回。然后到了使用它的时候,我经常会有做类似事情的冲动:

我并不是真的在谈论安全性,因为那样你就想要进行深度防御。我所指的代码类型通常对安全性不敏感,我只是在尝试编写设计良好的代码,从而很有可能发现错误。从某种意义上说,还需要针对故障进行深度防御,我想不仅是漏洞,而且同时,Unix 哲学要求代码做一件事,而且只是做那件事,但是很好。考虑到这一点,不“信任”您的验证代码来完成其工作似乎是不好的做法,然后在某个地方的另一个函数中制作另一段验证代码,“以防万一”。让两段代码做一件事也不好。另一个缺点是,如果您更改验证模式,那么您可能会忘记在这两个地方都这样做。

反馈?

0 投票
0 回答
41 浏览

hibernate - 在哪里测试实体的设置者?

我正在为使用 Hibernate 进行数据持久性的 Spring Web 应用程序编写单元测试。我还没有开发应用程序。我想知道编写 JUnit 测试测试实体的设置器以确保应用防御性编程是否是个好主意(即测试该应用程序不会尝试将无效数据插入数据库,例如:测试年龄不是负面的)。

另一方面,我看到@Size、@NotEmpty 和类似的注释已经用于实体字段。

这让我想到一个问题:在什么地方/层放置与数据库交互的警卫,是否有必要为实体设置器编写测试?

0 投票
1 回答
95 浏览

c# - 自动空值检查

供应商通常给我庞大的、超大的代理类来传递信息。很多时候,为了获得消息的实际内容,我必须进入这样的属性:

事实证明,这个 WCF 衍生品中的所有这些类都只有一个对象可以容纳任何东西(它会造成事物组织良好的错觉,你看)。

问题是这些类中的任何一个都可能包含空值,我得到一个异常。

这里的防御性编码是令人望而却步的。空值检查会导致代码嵌套很深。数组的坏处是数组的两倍,因为我必须检查 null 然后检查 count > 0。有时我必须遍历数组。

我可以尝试/捕捉,但是很难知道它在生产中的哪个地方击中了风扇,因为它不在我的调试器中。

有没有办法可以通过 Trace 显示哪个类为空?

有没有一种方法可以安全地取消对这个怪物的叶节点的引用,而不会造成软件冗长的丛林?

编辑:感谢把链接放在上面的人!这基本上是我通过谷歌搜索找不到的问题。

0 投票
2 回答
1039 浏览

java - 为什么使用克隆进行防御性复制会带来安全问题?

这些天,我正在阅读 Joshua Bloch 撰写的《Effective Java》第二版。在第 39 条中,他提到,如果这些对象稍后用于表示 Foo 类的状态,则制作作为参数传递的可变对象的防御性副本是一个好主意,例如在给定类 Foo 的构造函数中。在相同的上下文中,他提到避免使用非最终类的 clone() 方法,因为它可能返回一个旨在执行恶意操作的不受信任的子类的实例。

这是我不清楚的。作为恶意子类的一个例子,他提到了一个类,该类可以“在创建私有静态列表时记录对每个实例的引用,并允许攻击者访问该列表”。

我的疑惑:

  1. 他的意思是这个恶意类实际上可以记录封装类的所有私有/受保护/包/公共实例的引用吗?

  2. 如果是这样,那怎么可能?你能给我一个例子吗?

谢谢!

0 投票
3 回答
800 浏览

perl - perl 防御性编程(死,断言,呱呱)

在 perl 中进行防御性编程的最佳(或推荐)方法是什么?例如,如果我有一个必须使用(定义的)标量、ARRAYREF 和可选的 HASHREF 调用的子程序。

我见过的三种方法:

0 投票
2 回答
193 浏览

python - 如果python中的条件如何避免防御?

我正在编写一个代码,它试图深入挖掘输入对象并找出该对象内部的值。这是一个示例代码:

在很多情况下,我最终都会遇到这些“倾斜的 if 条件”。我怎样才能避免这种情况?这看起来很脏,也是一种防御性编程。

0 投票
5 回答
8618 浏览

c# - 这段代码是防御性编程,还是不好的做法?

我和我的同事就这段代码进行了辩论:

我的观点是,在代码所在的地方,x.parent不应该为空。当它为空时,我们有一个严重的问题,我想知道它!因此,不应存在空值检查并让下游异常发生。

我的同事说这是防御性编程。空值检查确保代码不会破坏应用程序。

我的问题是,这是防御性编程吗?还是不好的做法?

注意:重点不是谁对。我试图从这个例子中学习。

0 投票
1 回答
46 浏览

php - preg_match 会是唯一的防线吗?

我想知道,如果 preg_match() 可以用作 PHP 的唯一防线。

测试 preg_match(),至少对于一个简单的输入表单字段,它只接受正则表达式可接受的内容,并为其他所有内容返回 false:

对于数字:

对于名称:

所以我的问题是,preg_match() 是否可以成为不使用 htmlentities() 或 filter_var() 的唯一防线,因为它不接受任何其他内容,或者我错过了什么?

* 编辑 * 我创建了这段代码来测试它: 测试站点

0 投票
3 回答
2150 浏览

mysql - 测试登录系统是否防sql注入

因此,对于一个学校项目,我必须制作一个带有登录系统的网站。它有一个用户名和密码字段,以及一个提交按钮。它将用户名和密码与 MySQL 数据库中的用户名和密码进行比较。如果该组合在数据库中,则用户可以继续,否则他们将被重定向到登录页面。我为我的数据库连接使用准备好的 PDO 语句。

现在我的老师要我通过对登录系统执行sql攻击来测试安全性。不幸的是,我不知道在这些盒子里放什么,结果会是什么。例如,我尝试在将返回 true 的用户名和密码字段中输入值,如下所示:

但我不知道我是否成功了,也不知道攻击者是否可以通过这些语句访问或截断我的数据库。

html代码:

php认证:

0 投票
1 回答
75 浏览

xml - 在 Scala 中检测未知的 XML 标签

我正在 Scala 中构建一个 XML 解析器,并希望防范用户错误。如果用户给出了我不支持的标签(例如,<named>而不是<name>),或者更一般地说,将标签放在错误的位置,我想检测它并抛出错误。我如何以 Scala 方式做到这一点?