【问题标题】:Where to check GET/POST parameters? (MVC)在哪里检查 GET/POST 参数? (MVC)
【发布时间】:2011-07-18 19:01:23
【问题描述】:

我的网站布局:

索引.php: - 前控制器 - 包括 header.php - 包括模板.php - 包含footer.php

前端控制器检查 URL,并决定要包含哪个模板,或者如果它是一个动作,则进行错误检查并转发到视图。 我有一个搜索表单,它发布输入数据(使用 GET 方法)。前端控制器得到它,调用“action_search.php”,如果有错误就停止,然后包含“search_template.php”,这显示了搜索的结果。到目前为止,控制器会检查 GET 参数(它们是否存在、已转义等)并重定向到视图,但是有人通过浏览器直接调用视图是什么?脚本将终止“未知的 GET 参数”,因此必须在视图中再次执行。但它伤害了 MVC。那该怎么做呢?

【问题讨论】:

    标签: php security model-view-controller


    【解决方案1】:

    使用 mod_rewrite 强制通过 index.php 执行所有操作,然后每个请求都将通过 index.php 以您想要的方式处理,它可以决定要做什么。

    【讨论】:

      【解决方案2】:

      您的 MVC 应设置为不允许用户直接通过浏览器访问您的视图。使用 .htaccess 重写规则将所有请求重定向到前端控制器。

      【讨论】:

      • 是的,谢谢你的想法,它已经完成了,我忘了提 :) 但无论如何,同时我发现我同时使用了一个脚本作为动作和视图......我意思是,如果我添加一个用户,它有一个“action_useradd.php”操作将他添加到数据库中并重定向到一个视图,但它不能被允许对吗?视图不能被称为动作,对吧?
      • 另外一件事,如果脚本不能直接调用,模块可以。现在:action_doSearch.php -> 如果没问题,重定向到“searchList”模块。网站看起来像:“www.sitename/searchList?what=sdrsdf&num=424”但如果我只是调用“www.sitename/searchList”那么它会失败,因为它不会找到 GET 参数
      • 是的,不应将视图称为操作。您不应该重定向到视图,而是包含它。在您的 .htaccess 文件中,添加禁止直接访问视图的规则。
      【解决方案3】:

      除了使用 mod_rewrite/.htaccess “隐藏”页面之外,您还可以在不是 http 文档根目录的子文件夹的目录中拥有不应直接访问的 php 页面。

      【讨论】:

      • 换句话说,你只需要在你的文档根目录中需要 index.php 和其他所有东西,在一个不在文档根目录中的目录中。检查 Zend Framework 默认目录树以获取示例
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 2013-05-13
      • 2011-07-27
      相关资源
      最近更新 更多