2016-04-07 346 views
0

我已經對此做了相當多的研究,但似乎無法找到我的問題的確切答案,因爲在哪個代碼中放置了哪個位置。防止xss攻擊/注入

因此,我正在構建一個簡單的網站供用戶登錄和玩遊戲的JavaScript遊戲。該網站還沒有正常運行,但我收到了一個陌生人的隨機電子郵件,稱我的網站容易受到XSS的攻擊,並向我發送了一個重定向到我的網站的鏈接。當我回到我的網站時,出現了一個警報,顯示了Cookie和其他一些我不知道的東西。該鏈接不再處於活動狀態,因此我無法向您顯示添加到登錄表單輸入字段的腳本。

有什麼辦法可以防止惡意用戶這樣做嗎?如果有幫助,這是構成我的登錄名的代碼。

<form method="post">    
    <p>Login</p> 
    <div class="form-group"> 
    <label for="login" style="float:left">Email or username</label> 
    <input class="form-control" name="login" value="<?php echo addslashes($_POST['login']); ?>"/> 
    <label for="loginpassword" style="float:left">Password</label> 
    <input class="form-control" type="password" name="loginpassword" value="<?php echo addslashes($_POST['loginpassword']); ?>"/> 
    </div> 
    <input type="submit" class="btn btn-success btn-lg wrap" name="submit" value="login"/> 

    <?php 
    if($error) { 
     echo '<div class="alert alert-danger" id="errorDiv">'.addslashes($error).'</div>';     
    } 
    ?>  
</form> 

從login.php中的文件:

<?php 
    if ($_POST['submit']=="login") 
    { 
     $login = mysqli_real_escape_string($connection_info, $_POST['login']); 
     $loginpw = $_POST['loginpassword']; 

     //check database see if correct login details 
     // if not found then $error = "incroorect login details" etc 
     // if login details then match assign id from database as session variable for authentication 
    } 
?>  

有人能告訴我,正是我需要做的避免XSS這種特殊形式?從我讀過的內容來看,使用htmlspecialchars代替文本字段值的addslashes似乎更有用,但我不確定這是否能解決問題。

+0

http://stackoverflow.com/questions/1996122/how-to-preve nt-xss-with-html -php – epascarello

回答

0

任何注入的概念在命令和數據之間都是不明確的。當你在一個命令所在的地方使用任意數據時,你有一個潛在的注射點。

它適用於XSS彷彿攻擊者可以控制通過輸入狡猾使用什麼是你的網頁上,他們可以添加惡意腳本,併爲所欲爲。

你的問題是,你正在使用addslashes()。這不適用於轉義在HTML上下文中使用的數據。你有文本數據,但你實際上將它視爲HTML,因爲你直接將它注入到頁面中。攻擊者可以推入一些$_POST數據,這些數據將添加腳本標記或任何內容到您的頁面。

要解決此問題,請妥善地轉義在不同上下文中使用的任何和所有數據。在你的情況下,你的HTML變量周圍的htmlspecialchars()是你想要的。

你需要同樣爲您$error消息也是如此。當然,這不太可能會攻擊你自己的網站,但你想生成有效的HTML正確嗎?當一個流浪的支架出現在錯誤信息中並且破壞你的頁面時,不要感到驚訝。

0

永遠不要相信任何來自您不控制的設備的東西,在這種情況下,我假設它是瀏覽器。您必須清理或以其他方式過濾所有內容,以便在返回給瀏覽器時不會在瀏覽器中執行。您還需要確保它不能用於SQL注入等,但這是另一個問題。

您需要儘可能多地閱讀XSS。這個網站是非常有用的...

https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)

跨站點腳本時發生(XSS)攻擊:

數據通過一個不可信賴的數據源進入Web應用程序,最常見的web請求。

這些數據包含在動態內容中,該動態內容將發送給網絡用戶而不針對惡意內容進行驗證。

在您的例子,你有一個似乎正在POST的原始數據,並將其返回給用戶,即

<input class="form-control" name="login" value="<?php echo addslashes($_POST['login']); ?>"/> 

<input class="form-control" type="password" name="loginpassword" value="<?php echo addslashes($_POST['loginpassword']); ?>"/> 

雖然像計算器網站可以提供形式爲您的問題提供點解決方案您真正需要的是對XSS等的一般理解。

+0

感謝您的回答。我其實已經在前段時間閱讀過這個鏈接以及其他信息。從我的理解,addslashes是問題,我需要使用htmlspecialchars。但我只是想100%確定這是唯一的XSS漏洞。 – Jay

+0

看看這個以及... https://www.owasp.org/index.php/Data_Validation – Harry