如何只允许从一个域上载PHP?

如何只允许从一个域上载PHP?,php,forms,file-upload,Php,Forms,File Upload,在我编写的HTML表单中,用户可以使用ajax上传提交时发送的文件。脚本位于exampledomain.com/upload.php上 我想避免出现这样的情况,即有人将自己的表单指向upload.php,并开始向我的服务器发送未经授权的文件 每个人都可以填写我的HTML表单,所以上传时的登录/密码保护不是我的选择。是否有任何有效的方法确保upload.php只从我网站上的HTML表单触发 解决这个问题的一种方法是使用会话,但我不确定它在ajax中的效果如何。有什么建议吗?防止垃圾邮件发送者的最佳

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

我想避免出现这样的情况,即有人将自己的表单指向upload.php,并开始向我的服务器发送未经授权的文件

每个人都可以填写我的HTML表单,所以上传时的登录/密码保护不是我的选择。是否有任何有效的方法确保upload.php只从我网站上的HTML表单触发


解决这个问题的一种方法是使用会话,但我不确定它在ajax中的效果如何。有什么建议吗?

防止垃圾邮件发送者的最佳方法是验证码(尝试重新验证)。需要考虑的其他技术是隐藏形式的独特代码(有助于防止clrf攻击),使用$_SERVER[“”]验证域名,但相对容易对付

将PHP变量添加到页面以充当密码,但与其使用可以复制的静态值,不如使用每分钟都会更改的计算值

发送的计算值必须与upload.php文件中的计算值匹配,才能发送文件

这仍然不能阻止通过您的站点发送垃圾邮件。

虽然通常被归类为通过另一个站点对已通过身份验证的用户帐户的攻击,但用于对抗该攻击的技术在某种程度上对您有效,即使您的用户没有通过身份验证

具体地说,如中所述,为每个表单生成一个nonce(一次性唯一值),这将有助于防止其他站点简单地将数据发布到您的服务器——如果您验证POST请求发送的nonce值是您最近生成的,那么它至少必须来自“访问过”的用户你的网站

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

就个人而言,我认为如果你不打算使用经过验证的用户(我的意思是,至少需要验证码加上电子邮件地址验证才能让用户注册,然后要求他们在上传之前进行验证),那么我会说你几乎必须使用好的验证码系统,可能还需要定期检查异常活动,并对上传内容进行采样,以应对不可避免的垃圾邮件和攻击。遗憾的是,大多数流行的web服务需要这些检查是有原因的

(顺便说一句,会话在Ajax中工作得很好——只需确保在响应Ajax请求的页面中使用相同的会话处理代码即可。但在我看来,没有经过身份验证的用户,会话在安全方面不会给您带来任何好处。spambot可以很好地处理会话。)

我想避免出现这样的情况,即有人将自己的表单指向upload.php,并开始向我的服务器发送未经授权的文件

那是不可能的

如何只允许从一个域上载PHP

为了让您知道,文件不是从“域”上传的,而只是从用户的PC上传的


只要你在你的网站上有不受限制的注册,任何人都可以发送垃圾邮件。你必须选择另一种保护措施来对抗这种假想的威胁

您还可以计算上传文件的大小(以KB为单位),并将该整数附加到会话变量,然后在登录后的下一个登录页中检查该变量