2015-05-16 21 views
-2

我通過HTTP而非HTTPS通過POST方法發送未加密的電子郵件和密碼。黑客有可能看到原始POST數據嗎?

是否有人可以看到原始發佈數據?

我想象的原始數據後看起來像這樣: email='[email protected]」 &密碼=‘qazwsx’

我知道,我應該對密碼進行加密,但是這只是我做了一個例子。

實際上,我傳遞了更多的敏感信息。

編輯:

我現在有一個PHP腳本調用register.php這不正是顧名思義。

任何聰明到足以猜測我使用兩個名爲「email」和「password」的變量的人都可以通過發送一些POST數據來實現新用戶的註冊。我怎樣才能防止這個漏洞?顯然,它與SSL無關,這是我的第二個擔憂。

我不想讓一個17歲的「黑客」在3天內產生18,838,929個新帳戶。

+4

是的,它在中等攻擊時易受攻擊 – user4035

+0

簡短回答是肯定的。通過http協議發送數據時存在安全問題。你最好檢查:http://stackoverflow.com/questions/2003262/how-to-send-password-securely-via-http-using-javascript-in-absence-of-https?lq=1 –

+0

然後,爲什麼如果它被加密,他會不會解密它?爲什麼不寫一個五分鐘的HTML腳本來發送他看到的數據並實現登錄? –

回答

2

POST數據在請求正文中未加密發送。這與使用GET傳遞它一樣安全,儘管視覺較差。如果您的用戶通過公共/不安全(WiFi)網絡進行連接,則網絡後面的人總有可能攔截流量和所有HTTP數據。

考慮到您傳遞敏感數據,最安全的解決方案是使用基於SSL的HTTP(HTTPS)。這將爲您處理加密。你也可以做一些內部的客戶端加密,然後發送數據,但HTTPS是爲了安全起見而走的路。

編輯: 至於第二個問題,防止自動請求的簡單/基本方法是檢查每個請求的Referer和Origin標頭。這樣你可以過濾掉任何異地請求。另一種選擇是限制IP地址和用戶代理詳細信息的相同組合的每個時間間隔的請求數。這兩種方法都不是完全安全的,但可以結合可靠的驗證碼測試。

+0

可以通過SSL嗎?請看看原帖。我做了一個編輯。 –

+0

SSL over HTTP將加密您傳遞的數據,但不會阻止自動請求。使用引用程序檢查,IP檢查,驗證碼,CSRF令牌或它們的組合可以解決此問題。根據您的情況,您至少應該進行Referer驗證。 – adriann

0

使用會話。

每次用戶/客戶端訪問您的註冊頁面時創建一個新的會話標識符,然後用它來驗證請求。首先,您會發現這是驗證碼背後的主要想法。或更好的:

<?Php 
session_start(); 

if(isset($_SESSION['input1']) 
&& isset($_SESSION['input2']) 
&&(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST' 
|| strtoupper($_SERVER['REQUEST_METHOD']) === 'GET')) 
{ if(isset($_POST[$_SESSION['input1']]) 
    && !empty($_POST[$_SESSION['input1']]) 
    && isset($_POST[$_SESSION['input2']]) 
    && !empty($_POST[$_SESSION['input1']])) 
    { //PROCESS YOUR POST DATA HERE 
     $myInput1 = sanitize($_POST[$_SESSION['input1']]); 
     $myInput2 = sanitize($_POST[$_SESSION['input2']]); 
     echo "My variables are {$myInput1} and {$myInput2}."; 
     //AND ET CETERA 
    } 
    else 
    { session_unset(); 
     session_destroy(); 
     echo <<<REDIRECTION 
     <script type='text/javascript'> 
      alert("You've had a premature detonation. Call 911."); 
      window.location.replace('{$_SERVER['PHP_SELF']}'); 
     </script> 
REDIRECTION; 
    } 
    clearsess(); 
    exit(); 
} 

function sanitize($variable,$conn=NULL) 
{ if ($conn != NULL) 
     return mysqli_real_escape_string($conn, filter_var($variable, FILTER_SANITIZE_STRING)); 
    else 
     return filter_var($variable, FILTER_SANITIZE_STRING); 
} 

function createForm() 
{ $_SESSION['input1'] = rand(1111,9999); 
    $_SESSION['input2'] = rand(11111,99999); 
    return <<<NEWFORM 
    <form action = '{$_SERVER['PHP_SELF']}' method = 'post'> 
     <input type='text' name='{$_SESSION['input1']}'> 
     <input type='text' name='{$_SESSION['input2']}'> 
     <input type='submit' value='submit'> 
     <input type='reset' value='reset'> 
    </form> 
NEWFORM; 
} 

function clearsess() 
{ if(session_id() != '' && empty($_SESSION)) 
    { session_unset(); 
     session_destroy(); 
    } 
    session_write_close(); 
} 
?> 
<html> 
<head></head> 
<body> 
<?Php echo createForm(); ?> 
</body> 
</html> 
<?Php clearsess(); ?> 

那麼你可以使用它與captcha,雖然。 Captcha肯定會使用會話。