php - 如何允许只从一个域上传 PHP?

标签 php forms file-upload

在我编写的 HTML 表单中,用户可以上传使用 ajax 提交时发送的文件。该脚本位于 exampledomain.com/upload.php。

我想避免这样的情况,即有人要制作他自己的表单并使用指向 upload.php 的操作并开始用未经授权的文件向我的服务器发送垃圾邮件。

每个人都可以填写我的 HTML 表单,所以上传的登录名/密码保护对我来说不是一个选项。有什么有效的方法可以确保仅从我网站上的 HTML 表单触发 upload.php?

处理该问题的一种方法是使用 session ,但我不确定它与 ajax 配合使用的效果如何。有什么建议吗?

最佳答案

虽然Cross Site Request Forgery通常被归类为通过另一个站点对已验证用户帐户的攻击,用于对抗它的技术在某种程度上对您有用,即使如您所说,您的用户未经过身份验证。

具体来说,如 Jeff Atwood's article here 中所述,为每种形式生成随机数(一次性唯一值)将通过防止其他站点简单地将数据发布到您的服务器来提供帮助——如果您验证随 POST 请求发送的随机数值是您最近生成的,它必须至少来自“访问过”您站点的人不知何故。

但是,这并不能阻止垃圾邮件发送者通过从您的站点抓取 nonce 值来攻击您的站点,即假装是您的用户并使用您的实际表单。为此,您可能需要研究各种技术,例如 CAPTCHA s、黑名单和其他验证。

就我个人而言,我认为如果您不打算使用经过身份验证的用户(我的意思是至少需要验证码和电子邮件地址验证用户才能注册,然后要求他们在上传之前进行身份验证)那么我会假设您非常必须使用一个好的 CAPTCHA 系统,可能结合定期检查异常事件,并对上传进行抽样以对抗不可避免的垃圾邮件和攻击。遗憾的是,大多数流行的 Web 服务都需要这些检查是有原因的。

(顺便说一句, session 与 Ajax 一起工作得很好——只要确保在响应 Ajax 请求的页面中使用相同的 session 处理代码即可。但是如果没有经过身份验证的用户, session 将不会在据我所知,这是一种安全方式。垃圾邮件机器人可以很好地应对 session 。)

关于php - 如何允许只从一个域上传 PHP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7318743/

相关文章:

php - 等待直到从站同步

表单提交后未加载 CSS - jQuery Mobile

javascript - 如何在 React 组件中包含指定值的文本输入?

javascript - 使用 jquery 上传文件 : POST 500 (Internal Server Error)

php - 文件上传时,重复的空行输入到 mysql 中

php - 如何在单选按钮中显示数量值

PHP SOAP 头构造

php - 在传递给 ODBC 之前转义输入数据的正确方法

python - Django:无法将上传的图像绑定(bind)到表单 ImageField()

jquery - 文件上传 Jquery WebApi