2010-09-24 60 views
1

我对PHP很新颖,还没有找到真正实用的书,它描述了如何在真实世界的情况下以最好的方式在PHP中处理事物,并且具有安全性心里。即使搜索谷歌,大多数文章只是基本的,并不是真实世界的例子。我只是没有看到PHP网站的整体结构和流程。什么是从登录或表单帖子处理PHP的最佳方式

我采用的是例如,如果用户填写了ABC.php中的登录表单,数据将发布到XYZ.php?do = processLogin。在XYZ中,对于“do”变量,我有一个“IF ISSET”,如果它被设置,那么它会输入一个switch语句来处理登录或注销等,然后将它们重定向回适当的页面。如果“do”变量没有设置,它们会被转储回登录页面。

我见过很多例子,其中的数据发布到同一个脚本,但是几乎任何时候我正在做任何形式的表单处理或诸如登录注销或帐户编辑之类的操作,我都发布到完全独立PHP文件负责这项工作,然后将用户重定向回来。

是这种方式次优,异常,愚蠢?有人可以给我一些建议,或者链接一些与这个主题相关的好例子吗?我最近在想如何找到一些用PHP编写的开源应用程序,这样我就可以查看经验丰富的PHP编码人员如何构建他们的网站,所以如果任何人有一个可以看的人的例子,那也是值得赞赏的。

在此先感谢!

回答

1

你需要细心的第一条规则是永远,永远信任用户的输入,尤其是在你的GET/POST /请求超变量。

这一切都取决于你想要做的事情的范围,但是一般你只想从你的$_POST只想把你想要的变量放到你自己的变量中,比如$data(即$ data ['' do'] = $ _POST ['do']),这样你就不会有额外的变量在边界内隐藏。

您需要做的另一件事是确保您的用户输入正确地对其应用程序进行了消毒。如果您正在为博客进行输入 - 您想删除将以HTML解析的内容。如果您正在进行登录,您希望禁止用户输入SQL注入攻击,以允许他们以任何人的身份登录。

现在,使用一个中央文件委托所有其他任务实际上是一种很好的做法。你可以看到它全部结束。花一些时间考虑调用所有函数的最佳方式 - 我个人将变量检查和请求委托放在一个页面中。它减少了进入系统的入口点数量,使安全更容易锁定(因为您不必看管多个文件)。

使用它来委托你请求的是什么样的页面并不会改变设置。

在互联网上的论坛经常使用这种模式,以确保您不会保留双重张贴。但这并不涉及那些抨击“提交”的人。

有更好的方法来处理重复提交。首先,您应该在该页面上使用javascript单击后禁用您的提交按钮,并且只是抛弃一些让用户知道它正在加载的东西。然后,您可以使用此方法将重定向发送到“可以使用”页面(或失败页面)。下一步可能是使用cookie或生成表单ID数据来跟踪正在发送的提交内容。例如,当用户打开一个新页面时,帖子ID 123是打开的,如果他们一再提交,它会失败,因为帖子123已经发送。

我会建议比我的建议更深入研究这一点。 http://wiki.apache.org/struts/DataEntryForm

相关问题