我有一個從數據庫中讀取數據然後顯示它的網頁,但是我剛發現一個數據可能包含HTML的問題。消毒HTML代碼
在我的數據庫,我有以下3項:
鮑勃
吉爾
<button onClick="alert('hi')">Click me!</button>
現在,我有我的HTML頁面,獲取數據並顯示它,有一個click事件上每個條目,所以一個例子是:
<div onClick="DoSomething()">
<a>Bob</a>
</div>
我的代碼是刪除e瞰字符,從而<成爲<
直到我到了最後一個條目,我結束了工作得很好:
<div onClick="DoSomething()">
<a><button onClick="alert('hi')">Click me too!</button></a>
</div>
它顯示爲預期的,所以我會看到:
<button onClick="alert('hi')">Click me too!</button>
但它也正在採取,應該有一個點擊事件試圖顯示「嗨」。
有誰知道我可以安全地停止正在由名稱定義的onClick,但仍然有我的onClick事件在周圍的div。
我無法限制可以添加到數據庫的名稱。
如果你不允許這樣的事情被清除,你可能會打開你的應用程序到XSS攻擊。有人理論上可以注入代碼並運行它 – vsync
包含html的壞名稱目前不存在,但可以。這顯示了一個極端的例子,但我沒有辦法限制可以輸入到數據庫中的名稱(這是一個傳統的桌面應用程序,15年以上 - 現在有一個Web界面)。所以是的,我需要消毒,但我不知道如何做到這一點,但仍保留用戶輸入的名稱。我想通過改變轉義字符這將做到這一點。 – sbarnby71
@ sbarnby71如果您使用的是PHP,可以使用striptags:http://php.net/manual/pt_BR/function.strip-tags.php。對於其他語言,邏輯是相同的。 – user3753202