如果我有一个3层Web表单应用程序,它接受用户输入,我知道我可以使用表示层中的验证控件来验证该输入.我是否还应该在业务和数据层中进行验证,以防止SQL注入和问题?每层应该进行哪些验证?
另一个例子是传递ID以返回记录.数据层应该确保id有效还是应该在BLL/UI中发生?
您应该在应用程序的所有层中进行验证.
每层进行的验证特定于层本身.每个层都应该安全地向"坏"请求发送并获得有意义的响应,但是在每个层执行哪些检查将取决于您的特定要求.
宽广地:
ArgumentException时抛出和类似),并且应该检查在业务规则的约束内是否可以进行操作; 它应该保护您的域免受编程错误.每层的验证将确保只允许该层认为正确的数据和操作进入.这为您提供了大量的可预测性,知道信息必须符合某些标准才能通过您的数据库,操作必须符合逻辑才能通过您的域层,并且用户输入已经过清理并且更容易工作用.
它还为您提供安全保护,知道如果您的任何图层被破坏,则会有另一个图层在其后面执行检查,这会阻止任何您不想进入的图层.
Should I also validate in the business and data layers as well to protect against SQL injection and also issues?
是的,是的.
在业务层代码中,您需要再次验证输入(因为客户端可以被欺骗),还需要验证业务逻辑,确保条目对您的应用程序有意义.
至于数据层 - 您还需要确保数据对数据库有效.使用参数化查询,因为这将确保不会发生SQL注入.
至于您关于ID的具体问题 - 数据库将知道是否存在ID.这是否有效取决于它是否对您的业务层有意义.如果它纯粹是一个DB artefact(不是你的对象模型的一部分),而不是DB需要处理它,如果它是你的对象模型的一部分并且对它有意义,那么业务层应该处理它.
| 归档时间: |
|
| 查看次数: |
2503 次 |
| 最近记录: |