【问题标题】:How to get the referrer url of post request in php?如何在php中获取post请求的referrer url?
【发布时间】:2013-10-19 18:03:22
【问题描述】:

我正在开发一个 php 网站,允许用户添加带有描述、图像等的产品。我正在使用 POST 方法接收用户输入。但是,如果用户知道表单输入名称和表单的操作链接,他们可以使用 javascript 发送不断的请求并堵塞我的数据库。

所以,如果我能以某种方式获取来自 POST 请求的 URL,我就可以阻止这种情况。如果 POST 请求来自我网站的 url,我只能将信息输入数据库。

我知道使用验证码也可以防止这种攻击,但我想要一个替代方案,主要是因为验证码很痛苦。

有什么方法可以在不使用验证码的情况下做到这一点?也许会议?

【问题讨论】:

  • 你看过$_SERVER吗?
  • @UnholyRanger :是的,我有,似乎不符合我的目的。

标签: javascript php security post httprequest


【解决方案1】:

为表单提供安全性的最佳方式可能是向表单添加 CSRF 令牌 (http://en.wikipedia.org/wiki/Cross-site_request_forgery)。

它的工作原理是每次渲染表单时都会生成伪随机代码并将其存储在会话变量中,并将相同的代码作为隐藏输入放入表单中。

因此,当用户发布表单时,您可以验证 csrf 令牌是否相同。

还有一个关于这个的帖子,所以你可以看看那个 (How to properly add CSRF token using PHP)

【讨论】:

    【解决方案2】:

    您可以检查:

    $_SERVER['HTTP_REFERER'] 
    

    变量,但这可能会被伪造,所以要小心。

    您最好使用一些隐藏的输入,这些输入设置为必须等于设置字段的值才能进行插入(这种技术的名称目前让我无法理解)。

    <input type="text" id="areyouhuman" name="areyouhuman" value="123456001" />
    

    用 CSS 隐藏它:

    #areyouhuman{
         display:none;
    }
    

    希望能有所帮助?

    附:我也讨厌验证码!

    【讨论】:

    • 嗯,不仅是css,我也可以把它做成 这样没有人可以看到它。但是如果有人知道这个隐藏的值,他们可以很容易地发送这个价值以及他们的攻击请求。据我所知,网络专家可以转储发布数据并找出发布的内容..即,黑客有可能知道隐藏输入的价值... :(
    • 我认为垃圾邮件机器人检测隐藏的输入比 CSS 隐藏的输入要容易得多,但我不能肯定地告诉你,因为我从来没有感觉到需要使用一个。
    【解决方案3】:

    您可以使用标题来只允许来自您的网址的帖子:

        header('Access-Control-Allow-Origin: http://yoururl.com');
    

    干杯

    【讨论】:

    猜你喜欢
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多