2010-08-05 104 views
0

如何确保攻击者或垃圾邮件发送者不会试图从http://localhost计算机发送数据?我正在开发Flex/Flash应用程序,然后将数据提交给PHP。我知道他们有能力反编译actionscript,HTTP_REFERER会有帮助吗?php检查表单提交url

回答

0

你可以使用referrer,但即使这样也可能被欺骗。如果是我,我会sha1()一些随机字符串或闪存中的东西,并通过与您的窗体,然后你可以在PHP端sha1()并检查它们。

也许你甚至可以让动态的东西,像

sha1(date('Y-m-d')."MySaltPhrase"); 
+0

如果有人反编译闪光灯,那么它可以仍然是恶搞? – proyb3 2010-08-05 13:24:52

+0

是的,它可以被发现。通过查看网络流量也可以找到有效的值。在这个例子中,垃圾邮件发送者需要手动提交表单以找到魔术键,然后可以在脚本的剩余时间使用该键。 – 2010-08-05 13:27:53

+0

是的,如果你写了一个自定义算法或其他东西,那么你可以用更加动态的东西代替它。但是,您需要Flash和PHP中的相同内容。那么你可以在每次提交时更改密钥:) – 2010-08-05 14:32:43

0

parse_url()与字符串操作相结合应该工作。试试这个:

$url = parse_url($_SERVER['HTTP_REFERER']); 
$host = implode('.',array_slice(explode('.',$url['host']),-2)); 

if (strtolower($host) == 'google.com') { 
// code...... 
} 
+0

HTTP_REFERER可以手动设置,因此您的解决方案不是水密的。 – Deefjuh 2010-08-05 13:29:20

+0

@Deefjuh:那么?你的解决方案是什么? – Sarfraz 2010-08-05 13:31:42

1

并非所有浏览器提供HTTP_REFERER,它可以很容易地被欺骗,所以它不会保护您的形式。

您可以做的最好的事情,也是您唯一可以做的事情是确保您的PHP代码不信任任何输入。您应该检查提交给您的表单的任何值是否在可接受的值范围内,如果适用,请仔细检查登录信息等。

如果您担心机器人,请使用recaptcha或限制任何IP的提交数量地址为3分钟(例如 - 为您的情况选择适当的速度)。

简而言之:您永远无法确定表单提交的起源地点。您必须准备好处理来自攻击者的提交内容。

+0

我完成了所有。但SSL有帮助吗? – proyb3 2010-08-05 13:32:21

+0

如果你这样做了,你担心什么?你认为你可能容易受到什么样的攻击? – 2010-08-05 13:33:51

0

使用验证码进行验证。在提交表单时,您无法确定源或引用来源是本地主机还是公共IP地址。您将看到的本地主机是您自己的。

0

答案很简单 - 你不行。
因为每个表单实际上是从用户的本地计算机发送的。这是HTML的东西,你最好明白这一点。将为您节省大量的时间。

一般来说,你根本不需要任何保护。 但是对于一些特殊情况下的保护策略会有所不同

  • ,以防止垃圾邮件使用CAPTCHA
  • 防止CSRF利用独特的标记,同时存储在会话和窗体的隐藏字段
  • 添加自己的特定任务这里得到一个特定的保护方法。从你想捍卫什么攻击?