2016-12-05 54 views
6

我一直在經歷這麼多的論壇&維基百科的幾天以來,試圖瞭解XSS攻擊alomost我花了2-3天,但仍然沒有得到更好的主意,因爲建議多專家解答&我想知道黑客如何在受害者瀏覽器上注入惡意代碼?並且我的應用程序已經用於運行某些App Scanner標準測試工具,因此它捕獲了很多XSS問題。我想在這裏放一個我的應用程序的XSS問題,這樣可以請一些人幫我理解我爲這個問題究竟做了什麼。儘管如此,爲了更好地理解XSS問題,我一直在努力。這是我的代碼片段跨站腳本問題與window.location.search

function getParameter(param) { 
 
     var val = ""; 
 
     var qs = window.location.search; 
 
     var start = qs.indexOf(param); 
 
     if (start != -1) { 
 
       start += param.length + 1; 
 
       var end = qs.indexOf("&", start); 
 
       if (end == -1) { 
 
         end = qs.length 
 
       } 
 
       val = qs.substring(start,end); 
 
     } 
 
     return val; 
 
} 
 

 
var formName = getParameter("formName"); 
 
var myValue = '<a href="javascript:parent.opener.assignDateIps(new Date(\''+year+'\',\''+month+'\',\''+thisDay+'\'), \''+contextstr+'\', \''+formName+'\');window.close()" class="modulelink">'+thisDay+'</a></td>'; 
 
document.getElementById('calendarA').innerHTML = myValue;

而且這些陳述

var qs = window.location.search; 
val = qs.substring(start,end); 
var formName = getParameter("formName"); 
var myValue = '<a href="javascript:parent.opener.assignDateIps(new Date(\''+year+'\',\''+month+'\',\''+thisDay+'\'), \''+contextstr+'\', \''+formName+'\');window.close()" class="modulelink">'+thisDay+'</a></td>'; 
document.getElementById('calendarA').innerHTML = myValue; 

通過應用掃描測試工具爲XSS(跨站腳本)問題可能的代碼毫無遺漏的,但我不能確定它是如何導致XSS &我現在可以如何解決這個問題。任何人都可以提供有關如何修復此漏洞的見解嗎?

+1

你如何使用formName變量? – Qwertiy

+0

嗨Qwertiy,我剛剛加入這個應用程序剛剛加入了幾天,直接從事XSS問題。作爲開發人員,我可以說它是queryString參數名稱並將此參數傳遞給getParameter()函數,並嘗試使用window.location.search獲取該參數的值。 – Venki

+0

你如何使用提取值的afrer? – Qwertiy

回答

2
var myValue = '<a href="javascript:parent.opener.assignDateIps(new Date(\''+year+'\',\''+month+'\',\''+thisDay+'\'), \''+contextstr+'\', \''+formName+'\');window.close()" class="modulelink">'+thisDay+'</a></td>'; 

此行沒有任何轉義,預計'(... \''+formName+'\');...'是一個字符串。但它可以成爲其他一些事情:

formName = "'); alert('I\'m free to do anything here'); (''+" 
document.getElementById('calendarA').innerHTML = myValue; 

讓我們的地方這樣的片段插入myValue

... <img src=void onerror="alert('hacked')" /> ... 

您可以檢查它的工作原理:

document.querySelector('button').addEventListener('click', function() { 
 
    document.querySelector('output').innerHTML = document.querySelector('textarea').value; 
 
})
<textarea>... <img src=void onerror="alert('hacked')" /> ...</textarea> 
 
<button>Go</button> 
 
<output></output>

您絕對不應該信任任何通過url字符串傳遞的數據。任何網站都可以放置任何鏈接到您的網站。某些用戶點擊它,進入您的網站,參數在您的網站上執行,攻擊者可以做任何他想做的事情。

+0

感謝你提到這個陳述'var myValue =''+thisDay+'';'沒有任何轉義它意味着我可以做這個我已經在我的應用程序中導入了ESAPI庫,但我是不知道如何使用它。任何示例代碼在這個如何我可以逃避這個代碼。 – Venki

+0

請幫助我Qwertiy的一個實例,然後我會根據我的下一個問題進行分析。 – Venki

+0

@Venki,沒有足夠的內容幫助 – Qwertiy

0

您向我們展示的代碼中沒有任何內容易受攻擊。

您正在閱讀用戶輸入內容,因此可能會在此處引入漏洞。那是可能是你正在使用的工具正在檢測。

如果您的代碼易受攻擊,那麼這將是因爲您在接下來的代碼formName(在您未向我們顯示的代碼中)做的任何事情。

+0

嗨昆汀,你的猜測是對的。在此var myValue =''+thisDay+''中使用了此「formName」值; – Venki

+0

對此有任何幫助嗎?我現在已經修改了我的問題 – Venki

0

這是一個可能的基於DOM的XSS問題。

如果您正在使用的formNamedocument.getElementById("demo").innerHTML=formName或以某種方式的價值正在創建您的DOM元素/使用修改的formName你是脆弱的, 我可以像http://urwebsite.html?formName=<script>document.cookie_will_be_transfered_to_my_server_here</script>創建自定義網址,並要求親自登錄點擊它(簡單的社會工程)。現在我有那個人的會話ID,使用它我可以做我想做的事情。

作爲分辨率,來自用戶的所有輸入數據都必須進行html編碼。

+0

嗨Vinod,看起來你回答了我的問題,但是在這裏我有一個共同點,即什麼是document.getElementById(「demo」)的最終代表。網頁上的innerHTML是什麼? – Venki

+0

不是'

  • 11. 經典ASP ::跨站點腳本(XSS)驗證問題
  • 12. XMLHttpRequest跨站點腳本?
  • 13. 避免跨站點腳本
  • 14. params.merge和跨站點腳本
  • 15. 跨站點腳本預防
  • 16. 跨站點腳本表單
  • 17. 跨站腳本可能性?
  • 18. htmltextwriter和跨站點腳本
  • 19. document.domain和跨站點腳本
  • 20. 跨站點腳本幫助?
  • 21. 保護跨站點腳本
  • 22. 字符編碼問題 - 跨域腳本
  • 23. 跨域腳本問題和JSONP
  • 24. window.location.search
  • 25. Xmlhttprequest跨站點域問題?
  • 26. 跨站點javascript問題
  • 27. 跨瀏覽器問題與IE和jQuery腳本
  • 28. 與腳本共享問題
  • 29. 問題與腳本的getJSON
  • 30. Crontab問題與Perl腳本