2016-04-12 1 views
1

Fortify Scan meldet eine Sicherheitslücke 'Open Redirect' inWie behebe ich Open Redirect Sicherheitslücken in JavaScript?

window.open(strUrl,"_blank", features) 

Mein Code:

var features = "status=no, toolbar=no, menubar=no, location=no, top=20, left=175, height=500, width=750"; 

var strURL = ADMIN_TOOL_SNOOP + "?machineName=" + strMachine + "&template=snoop" +"&context=DEBUG&date=" + strDate.replace(regExp, ""); 

var validateStrURL = new RegExp("/^[.\\p{Alnum}\\p{Space}]{0,1024}+/", "g"); 
if(validateStrURL.test(strURL)) 
{ 
    if((strURL != null)&&(strURL.length !=0)&&(strURL.length <= 200)) 
    { 
    window.open(strURL,"_blank",features); 
    } 
} 

Wie kann ich das Problem beheben?

Antwort

4

Bei der Erkennung von Problemen führt HP Fortify statische Codeanalysen basierend auf einer Reihe von Regeln durch. Im Fall von "Open Redirect" -Ausgaben wird festgestellt, dass Sie auf eine URL umleiten, die aus Daten besteht, die an Ihr JavaScript übergeben oder in diesem erstellt wurden. Dies gilt allgemein als offen für Manipulationen durch Phishing und andere Angriffe.

Anstatt auf der Clientseite ADMIN_TOOL_SNOOP zu definieren und sie zum Erstellen der URL in JavaScript zu verwenden, versuchen Sie, auf der Serverseite eine Reihe vordefinierter Ziele mithilfe einer Umleitungsseite zu definieren Zielseite als Parameter.

Zum Beispiel in der Client-Seite Code hat

window.open('redirect.php?destination=ADMIN_TOOL&template=...') 

Dann in der Server-Side-Code, würden Sie eine Tabelle ähnlich

DESTINATION_CODE | ACTUAL_URL 
-------------------------------------- 
ADMIN_TOOL  | my_actual_page.php 
ANOTHER_CODE  | another_page.php 

haben Wenn der Server eine Umleitungsanforderung empfängt, Es sollte den übereinstimmenden Code nachschlagen und die Seite auf die tatsächliche URL umleiten. Im Falle eines nicht übereinstimmenden Codes sollte ein Fehler oder keine Umleitung auftreten.

Zusammenfassend erstellen Sie eine Whitelist mit zulässigen URLs, die auf der Serverseite statt auf der Clientseite gesteuert wird. Dies bedeutet, dass sie nicht für clientseitige Manipulationen geöffnet ist.

HP reference for that scan result

+0

Vielen Dank! Das ist schön erklärt. –

+0

Wie zu beheben, wenn Query String Wert dynamisch ist, d. H. Textfeld Wert? window.open ('redirect.php? Destination =' + paramvalue); –