【问题标题】:Do I need to filter/sanitize/validate GET variables used for filtering of entities我是否需要过滤/清理/验证用于过滤实体的 GET 变量
【发布时间】:2018-06-09 16:58:36
【问题描述】:

我正在构建一种目录形式,它具有对页面上显示的实体进行“过滤”的形式,与普通网上商店通常过滤类别、价格或任何其他属性的方式相差无几实体拥有。

考虑到这一点...我是否应该关心过滤/清理/验证传入的 GET 变量?我使用的 CMS 可以处理(或至少应该)并确保没有任何讨厌的东西进入数据库。

例如,我是否应该关心用户可能会将“?fromPrice=1000&toPrice=2000”更改为无效的内容,例如 ?fromPrice=xyz&toPrice=2000”。

我最初的任务是为此创建一种系统形式,它将验证值并回退到默认值,但我很难看到这样做的意义。

这样做是否会带来任何安全点、异常预防或其他任何东西,或者这只是浪费时间?

【问题讨论】:

  • 简短的回答是 IMO。使用您的示例,如果价格应该是数字,那么检查以确保它们实际上是数字而不是 xyz 将是明智的做法。这同样适用于可能传递的任何其他预期为某种类型的东西。
  • 我同意你对事物语义的看法,但这样做背后是否有任何“实际”推理,而不仅仅是基于意见?
  • 任何来自用户的输入(通过 URL 或表单)都应该在对其进行任何操作之前进行检查和验证。这不是观点,这是事实。任何可能被用户更改的东西都应该被认为是受污染的/坏的/邪恶的,直到/除非通过验证证明不是这样。
  • > 最常见的五种网站攻击中的三种——SQL 注入、跨站点脚本 (XSS) 和远程文件包含 (RFI)——有一个共同的根本原因:输入清理。或者更准确地说,缺乏。esecurityplanet.com/browser-security/…

标签: php security get


【解决方案1】:

官方的解决方案是使用 php 的清理: http://php.net/manual/ro/filter.filters.sanitize.php

但是,如果它只是从/到价格,您应该检查它们是否是大于零的数字。这应该适用于您的示例,如果验证失败则加载默认值。

参考http://php.net/manual/en/function.is-int.php

【讨论】:

  • 感谢您的回复,但问题不是关于如何做,而是如果。
猜你喜欢
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 2012-01-18
  • 2020-09-25
  • 2015-01-21
相关资源
最近更新 更多