【问题标题】:Prevent direct access to action form [duplicate]防止直接访问操作表单[重复]
【发布时间】:2013-05-14 13:28:48
【问题描述】:

我有一个 form.php 至极动作调用 sql.php 文件,例如:

SQL.PHP

if ($_REQUEST['action'] == "add") {
}
if ($_REQUEST['action'] == "edit") {
}

我想阻止直接访问,因为用户可以从浏览器 url 调用:http://sql.php?action=add 一种方法是检查是否提交。看起来效果不错。

if( isset($_POST['Submit']) && ($_POST['Submit'] == "Submit") )
{
echo "direct access not allowed";
}  

还有更好的选择吗?

【问题讨论】:

  • 你无法阻止它
  • 简单的答案:将令牌添加到您的表单中。
  • 你好类,如何添加token,你有什么参考或例子吗?
  • @user2307958 这将为您提供一个开始,但您可能需要修改它以满足您的需求Cross-Site Request Forgeries

标签: php


【解决方案1】:

使用$_SERVER['HTTP_REFERER'] 数组来检测是否有人通过在浏览器中输入来直接访问您的页面,或者通过使用页面中的链接从您的另一个页面访问。

所以,基本上。

if($_SERVER['HTTP_REFERER'] == 'about.php'){
//let user do something
}

因此,$_SERVER['HTTP_REFERER'] 全局存储您访问的页面的信息,如果您在页面中放置 echo 该代码,它将告诉您您来自哪个页面。意思是,如果您只键入页面并访问它,它将给出0/false 值。

因此,您可以使用它来检测是否有人直接输入该页面或来自您的某个页面。


正如其他人已经指出的那样,使用令牌和会话会是一个更好的主意,因为这种方法可以被操纵。所以,我建议你用谷歌搜索出来

【讨论】:

  • 引荐来源网址很容易被欺骗。
  • @j08691 我也可以向他推荐课程,但对于新手来说,这将是一个基本/不错的选择。但是,我会提到会话
【解决方案2】:

应该是 if(!isset($_POST['Submit']) 。此外,如果您使用method="POST",它不会在浏览器中抛出像?action=add 这样的参数。 method="GET" 做到了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多