[英]read XML from URL and secure it
我有一個關於安全性的一般性問題。 我有自己的Web應用程序,我想通過閱讀XML來顯示另一個網站的數據。
但是從外部資源解析XML是不安全的,頁面可能包含有害腳本或其他內容。 解析xml並避免所有可能損害我的網站的腳本的操作。
這是我的解析,但不安全!
XmlDocument doc1 = new XmlDocument();
doc1.Load(url);
XmlElement root = doc1.DocumentElement;
XmlNodeList nodes = root.SelectNodes("/response/current_observation");
foreach (XmlNode node in nodes)
{
string tempf = node["node1"].InnerText;
string tempc = node["node2"].InnerText;
label2.Text = tempf;
label4.Text = tempc;
將數據讀取到一個類中,然后在我的應用程序中顯示它可能是解決方案?
您可以查看本文: 如何防止跨站點腳本安全問題
從文章:
根本的問題是許多網頁顯示未經驗證的輸入。 如果輸入未經驗證,則可以將惡意腳本嵌入到輸入中。 如果服務器端腳本隨后顯示此未經驗證的輸入,則該腳本在瀏覽器上運行,就像受信任的站點生成了它一樣。
如果未驗證對動態網頁的輸入,則可能會遇到以下問題:
哪些網頁有風險? 本質上,該問題會影響基於未經驗證的輸入的動態頁面創建。 典型示例包括以下類型的網頁:
本節介紹了幾種防止跨站點腳本安全攻擊的方法。 評估您的具體情況,以確定哪種技術最適合您。 重要的是要注意,在所有技術中,您都是在驗證從輸入而非可信腳本接收的數據。 本質上,預防意味着您通過對例程輸入進行健全性檢查來遵循良好的編碼習慣。
以下列表概述了防止跨站點腳本攻擊的一般方法:
篩選或編碼時,必須為網頁指定字符集,以確保篩選器正在檢查適當的特殊字符。 插入到您的Web頁中的數據應篩選出基於特定字符集被認為是特殊的字節序列。 一個流行的字符集是ISO 8859-1,它是HTML和HTTP早期版本中的默認字符集。 更改這些參數時,必須考慮本地化問題。
根據特殊字符的輸入參數對輸出進行編碼
對以HTML格式寫出的輸入進行編碼。 此技術對輸入過程中由於某些原因未驗證的數據有效。 通過使用URLEncode
和HTMLEncode
,可以防止執行惡意腳本。
以下代碼段演示了如何使用Active Server Pages(ASP)頁面中的URLEncode
和HTMLEncode
:
<%
var BaseURL = http://www.example.com/search2.asp?searchagain=;
Response.write("<a href=\"" + BaseUrl +
Server.URLEncode(Request.QueryString("SearchString")) +
"\">click-me</a>");
%>
<% Response.Write("Hello visitor <I>" +
Server.HTMLEncode(Request.Form("UserName")) +
"</I>");
%>
如果對HTML和URL進行編碼,則可能需要指定代碼頁,就像過濾數據時一樣。
重要的是要注意,在將要顯示的字符串上調用HTMLEncode
將阻止執行其中的任何腳本,從而避免了該問題。 過濾特殊字符的輸入參數
過濾輸入的方法是從輸入中刪除一些或所有特殊字符。 特殊字符是使腳本能夠在HTML流中生成的字符。 特殊字符包括以下內容:
< > " ' % ; ) ( & + -
請注意,您的個人情況可能需要過濾除特殊字符之外的其他字符或字符串。
盡管過濾可能是一種有效的技術,但有一些警告:
以下使用JavaScript編寫的示例過濾器演示了如何刪除特殊字符:
function RemoveBad(strTemp) {
strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"");
return strTemp;
}
以下代碼在存儲用戶供以后使用之前處理用戶輸入。
<% Session("StoredPreference") = RemoveBad(Request.Cookies("UserColor"));
var TempStr = RemoveBad(Request.QueryString("UserName"));
根據輸入參數過濾輸出特殊字符
該技術類似於過濾輸入,除了過濾輸入給客戶端的字符。 盡管這可能是一種有效的技術,但對於寫出HTML元素的網頁可能會帶來問題。
例如,在寫出<TABLE>
元素的頁面上,刪除特殊字符的通用函數會去除<和>字符,從而破壞<TABLE>
標記。 因此,為了使該技術有用,您將僅過濾傳入的數據或用戶先前輸入並存儲在數據庫中的數據。
惡意數據的可能來源
雖然此問題適用於使用輸入來動態生成HTML的任何頁面,但以下是一些可能的惡意數據源,可幫助您檢查潛在的安全風險:
結論
總之,以下是有關跨站點腳本安全問題的要記住的關鍵點:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.