2013-01-06 42 views
0

對數據庫(MySQL)輸出使用htmlspeciachars,還有什麼要考慮防止XSS?對數據庫(MySQL)輸出使用htmlspeciachars,還有什麼要考慮防止XSS?

它是正確的,fethcing從數據庫中的數據時使用的輸出用htmlspecialchars(在這種情況下,MySQL的),你會防止XSS?在這種情況下,HTML將顯示在HTML文檔中?還有什麼你應該考慮的嗎?我的意思是在哪些其他情況下你可能容易受到XSS的攻擊?

可以說我有在那裏我已經創建了一個登錄系統一個網站,爲用戶發佈新帖,在這裏,用戶可以刪除這些新聞後,但JavaScript函數這裏有alertbox使用()來使確保用戶確實要刪除這條消息,如果是新聞ID被鏈接通過URL傳遞這樣的:

echo '<a class="btn-small btn-danger" onclick="deleteNews('. htmlspecialchars($newsidfk) .')" ">Delete news</a>'; 

JavaScript函數:

//alert deleteNews 
function deleteNews($newsidfk) 
{ 
var ans = window.confirm(Are you sure you want to delete this news post?'); 
     if (ans == true) 
     { 
      window.location.href="delete.php?news_id_fk="+$newsidfk; 
     } 
} 

有什麼別的東西,我應該考慮防止XSS,還是不能在這裏完成XSS?比方說,我有一個字符串istead一個數字,我應該做一些JavaScript編碼,也許encodeURI()函數?

使用htmlspecialchars阻止例如script-tags,link-tags和img-tags運行是否正確?這就是XSS如何工作的原因,因爲那麼有人可以竊取用戶的私人信息?

我已經瞭解到,在顯示來自數據庫的輸出時,您應該始終進行清理,但是如何將輸入存儲到數據庫中呢?您是否應該對此進行消毒,還是僅僅使用PDO準備好的陳述或其他方法以及如何操作?

我讀過有關HTML表單消毒這篇文章維基: http://en.wikipedia.org/wiki/HTML_sanitization

回答

1

始終輸出的JavaScript文字的JSON。

<a class="btn-small btn-danger" onclick="deleteNews(<?php echo htmlspecialchars(json_encode($newsidfk)); ?>)" ">Delete news</a> 

<script> 
var data = <?php echo json_encode($data); ?> 
</script> 
+0

好了,從來沒有聽說過這個json_encode的,應包括這樣的圖書館嗎? – user1938304

+0

我應該只在使用字符串時才這麼做嗎?我的意思是如果它只是一個數字,我不需要這樣做? – user1938304

+0

不,但是您的PHP應該使用[JSON](http://php.net/manual/en/book.json.php)支持來構建。 –

1

它是正確的,fethcing從數據庫中的數據時使用的輸出用htmlspecialchars(在這種情況下,MySQL的),你會防止XSS?在這種情況下,HTML將顯示在HTML文檔中?還有什麼你應該考慮的嗎?我的意思是在哪些其他情況下你可能容易受到XSS的攻擊?

是的,這是排序是正確的。有時被忽視的整個故事的一部分是字符編碼。雖然默認情況下這種方式運行得很好,但它可以是是因爲如果您沒有檢查您對通過htmlspecialchars輸入的數據所使用的編碼是否也向函數本身發出了信號,則會出現問題。

E.g.如果你使用PHP 5.3,和你有UTF-8編碼字符串在數據庫和您查詢它們的方式和你使用UTF-8在HTML中,那麼你也應該告訴htmlspecialchars

$flags = ENT_COMPAT | ENT_HTML401; 
$encoding = 'UTF-8' 

htmlspecialchars($string, $flags, $encoding); 

儘管如果你「再使用PHP 5.4,UTF-8是默認編碼,你並不需要爲它提供那麼:

htmlspecialchars($string);