确保您的应用安全的10件事:#3验证输入

这是OWASP十大前摄性开发控件系列文章的第3部分。

抵御攻击的第一道防线应始终是检查来自不受信任来源的所有数据。 输入验证是应用程序安全的基础,也是良好的防御性编程的基本部分。

这很简单,很明显–经常做错。

不要依赖客户端验证

一个常见的错误是依靠客户端验证来发现问题。 客户端验证对于在UI上提供即时反馈很有用。 但这不会保护您的系统,尤其是在Web应用程序中。 如果攻击者可以找到一种方法将自己插入浏览器和您的应用之间(可以使用代理完成此操作),则在本地客户端编辑完成后,攻击者可以使用任何数据,包括标头字段和其他隐藏数据已经完成了。 来自客户端(尤其是网络外部客户端)的数据绝对不可信任。

另一个常见的错误是依靠否定检查或“黑名单”验证来尝试捕获已知的不良数据。 这是一项较弱的技术:您无法确定会遇到所有不良情况或组合,并且可以通过(double)编码和其他规避技巧来破坏否定检查。

白名单验证

OWASP建议您始终使用正向限制( 白名单验证) ,在其中使用正则表达式(regex)定义可接受的类型和大小以及所有允许的值。 主动控件的一个示例:密码字段的正则表达式可以是:

^(?=.*[a-z])(?=.*[A-Z]) (?=.*\d) (?=.*[@#$%]).{10,64}$

此正则表达式可确保密码长度为10到64个字符,并包括大写字母,小写字母,数字和特殊字符(@,#,$或%的一种或多种用法)。

白名单验证对于枚举数据而言是微不足道的:一周中的几天,一年中的几个月……您可以放入已定义列表的任何内容。 对于其他常见数据类型 (例如日期和时区,数字类型,货币,电子邮件地址,IP地址,URL和域名以及信用卡号),可以使用Apache Commons Validator库。

验证自由格式文本字段(名称,注释)更加困难,尤其是可以(或需要)包含特殊字符(尤其是标记)的文本字段:

如果您的应用程序处理标记(应该包含HTML的不受信任的输入),则可能很难验证。 编码也很困难,因为它会破坏应该在输入中的所有标签。 因此,您需要一个可以解析和清除HTML格式文本的库,例如OWASP Java HTML Sanitizer 。 正则表达式不是解析和清理不受信任HTML的正确工具。

您可以使用模糊测试工具或静态分析污点检查 (使用通过代码中的执行路径运行并确定何时引用未经验证的数据的工具)以及笔测试和其他工具来测试输入验证的可靠性。手动探索性测试。

翻译自: https://www.javacodegeeks.com/2014/06/10-things-you-can-do-to-make-your-app-secure-3-validate-input.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值