2010-05-25 65 views
6

我一直在閱讀關於XSS的內容,我用一個文本和提交輸入做了一個簡單的表單,但是當我對它執行<script>alert();</script>時,沒有任何反應,服務器得到這個字符串,就這些了。是什麼使輸入易受XSS影響?

我必須做些什麼才能讓它變得脆弱? (然後我會學到我不該做的嘿嘿)

乾杯。

+0

您是否使用任何服務器端語言? – StingyJack 2010-05-25 18:53:28

+0

NET(但不是ASP.NET) – vtortola 2010-05-26 00:00:48

回答

20

事實上,只要讓服務器輸出它,以便輸入字符串可以有效地嵌入HTML源代碼中,並返回給客戶端。

PHP例子:

<!doctype html> 
<html lang="en"> 
    <head><title>XSS test</title></head> 
    <body> 
     <form><input type="text" name="xss"><input type="submit"></form> 
     <p>Result: <?= $_GET['xss'] ?></p> 
    </body> 
</html> 

JSP示例:

<!doctype html> 
<html lang="en"> 
    <head><title>XSS test</title></head> 
    <body> 
     <form><input type="text" name="xss"><input type="submit"></form> 
     <p>Result: ${param.xss}</p> 
    </body> 
</html> 

另外,您可以重新顯示在輸入元素的值,這也是經常看到:

<input type="text" name="xss" value="<?= $_GET['xss'] ?>"> 

RESP。

<input type="text" name="xss" value="${param.xss}"> 

這樣「怪異」的擊弦像"/><script>alert('xss')</script><br class="會工作,因爲服務器將使其畢竟作爲

<input type="text" name="xss" value=""/><script>alert('xss')</script><br class=""> 

XSS預防解決方案等等htmlspecialchars()fn:escapeXml()分別爲PHP和JSP。這些將取代<,>",&lt;,&gt;&quot;,以便最終用戶輸入不會直接嵌入到HTML源代碼中,而只是在輸入時才顯示。

19

讓服務器將輸入返回給客戶端。

+2

我讀過「讓服務器將輸入返回給客戶端。」,並認爲哇,這是對這個問題最簡單,最死的答案。 – 2010-05-25 15:09:20

4

您應該「注入」腳本。所以,如果你有一個文本輸入,你應該把形式:

" /> <script>alert();</script> 

這樣,您先關閉現有的HTML的屬性,然後注入自己的代碼。這個想法是爲了逃避報價。

+0

這不是他要問的。他知道如何執行攻擊,他問的是什麼使輸入變得脆弱。 – 0112 2017-04-26 16:24:36

2

谷歌做了一個非常好的教程,涵蓋了XSS和其他安全漏洞here。它可以幫助您瞭解這些問題在實際應用中如何被利用。

+2

該鏈接現已死亡... – mix3d 2015-08-31 18:38:22

1

三個簡單的事情:

  1. 如果你沒有在某些時候輸出不可信數據頁面存在XSS對於沒有機會
  2. 你所有的untusted數據(表單,查詢字符串,標題等)應該對白名單進行驗證以確保其在可接受的範圍內
  3. 所有輸出到屏幕的輸出都應該使用適當的語言(HTML,CSS,JS等)以適當的庫(即用於.NET的Anti-XSS)進行結束編碼)。

更多資料可在OWASP Top 10 for .NET developers part 2: Cross-Site Scripting (XSS)舉報。

相關問題