如何防止PHP中URL变量被篡改?

如何防止PHP中URL变量被篡改?,php,web-applications,cakephp,security,Php,Web Applications,Cakephp,Security,我正在用CakePHP构建一个web应用程序,授权用户可以添加、更新、删除记录。在某些控制器中,要添加记录,我的URL结构如下: records/add/id_of_parent_record/secondvar:another_decision_dependent_value. 我担心的是,用户可能会篡改这些GET变量,这将导致整个记录被破坏。我知道我可以为这些VAR使用会话,但我正在寻找最好的方法。请分享您的知识和经验。始终使用POST请求创建、更新、删除此类内容,以免意外发生。 但即使使

我正在用CakePHP构建一个web应用程序,授权用户可以添加、更新、删除记录。在某些控制器中,要添加记录,我的URL结构如下:

records/add/id_of_parent_record/secondvar:another_decision_dependent_value.

我担心的是,用户可能会篡改这些GET变量,这将导致整个记录被破坏。我知道我可以为这些VAR使用会话,但我正在寻找最好的方法。请分享您的知识和经验。

始终使用POST请求创建、更新、删除此类内容,以免意外发生。 但即使使用POST,也不要相信用户的输入


另外,请看一看。

始终使用POST请求来创建、更新、删除此类内容,这样就不会意外发生。 但即使使用POST,也不要相信用户的输入


另请看一看。

一般的经验法则是,任何类型的URL变量(包括URL中的所有内容)都应仅用于选择和显示变量。这样,如果用户搞砸了什么,那又怎样?他们搞砸了,你不能保证他们会支持他们。他们不容易通过粘贴错误的东西来处理后端数据,这或多或少是RESTful GET背后的想法


另一方面,如果需要修改某些内容,则应同时使用身份验证和HTTP身份验证。HTTP身份验证被认为更理想,因此只有拥有修改权限的用户才能修改。通常也通过PUT/POST/DELETE请求完成。在PHP框架中,POST将是最简单/最常见的,因为PUT和DELETE需要付出更多的努力才能在PHP中获得完全的支持。

一般的经验法则是,任何类型的URL变量,因此URL中包含的所有内容都应该只用于选择和显示变量。这样,如果用户搞砸了什么,那又怎样?他们搞砸了,你不能保证他们会支持他们。他们不容易通过粘贴错误的东西来处理后端数据,这或多或少是RESTful GET背后的想法


另一方面,如果需要修改某些内容,则应同时使用身份验证和HTTP身份验证。HTTP身份验证被认为更理想,因此只有拥有修改权限的用户才能修改。通常也通过PUT/POST/DELETE请求完成。在PHP框架中,POST是最简单/最常见的,因为PUT和DELETE需要付出更多的努力才能在PHP中获得完整的支持。

除了POST和POST/Redirect/Get建议之外。。一般而言:


永远不要信任HTTP请求中收到的任何信息,包括GET参数、发布的数据、cookie和HTTP头。始终确保用户有权对相关数据对象执行每个操作,并且在接受和处理数据之前,您始终在服务器端验证数据是否尽可能合理。

除了POST和POST/Redirect/Get建议之外。。一般而言:


永远不要信任HTTP请求中收到的任何信息,包括GET参数、发布的数据、cookie和HTTP头。始终确保用户有权对相关数据对象执行每个操作,并且在接受和处理数据之前,始终在服务器端验证数据是否尽可能合理。

我的观点是,只有经过身份验证的用户才能访问该操作。我也不相信用户的输入。现在,我的客户可以访问一个分类页面,并在其中添加另一个产品,其URL类似于add/cat_id/。现在仍然会检查cat_id是否有效等。我担心的是,用户只需更改URL即可添加/some_other_有效的cat_id。我是否应该在会话中发送cat_id集?否则,我会检查URL是否来自正确的视图。也许您需要解释为什么这在您的应用程序设计中是一件坏事。用户将项目添加到某个其他有效的cat\u id有什么问题?为什么与用户将项目添加到cat\u id不同?是的,这是一个有效点。为什么不好?之后,具有所有权限的用户正在添加。但在我的应用程序中,如果有人试图更改这些值,并且这些值不是来自有效的源,我会重定向它。我的观点是,只有经过身份验证的用户才能访问该操作。我也不相信用户的输入。现在,我的客户可以访问一个分类页面,并在其中添加另一个产品,其URL类似于add/cat_id/。现在仍然会检查cat_id是否有效等。我担心的是,用户只需更改URL即可添加/some_other_有效的cat_id。我是否应该在会话中发送cat_id集?否则,我会检查URL是否来自正确的视图。也许您需要解释为什么这在您的应用程序设计中是一件坏事。用户将项目添加到某个其他有效的cat\u id有什么问题?为什么与用户将项目添加到cat\u id不同?是的,这是一个有效点。为什么不好?之后,具有所有权限的用户正在添加。但在我的申请中如果有人
e试图改变值,如果它不是来自有效的源,我会重定向它。我的观点是只有经过身份验证的用户才能访问该操作。我也不相信用户的输入。现在,我的客户可以访问一个分类页面,并在其中添加另一个产品,其URL类似于add/cat_id/。现在仍然会检查cat_id是否有效等。我担心的是,用户只需更改URL即可添加/some_other_有效的cat_id。我是否应该在会话中发送cat_id集?否则,我会检查URL是否来自正确的视图。我的观点是,只有经过身份验证的用户才能访问该操作。我也不相信用户的输入。现在,我的客户可以访问一个分类页面,并在其中添加另一个产品,其URL类似于add/cat_id/。现在仍然会检查cat_id是否有效等。我担心的是,用户只需更改URL即可添加/some_other_有效的cat_id。我是否应该在会话中发送cat_id集?否则,我会检查URL是否来自正确的视图。