2017-05-31 65 views
0

以下代碼顯示fortify中的跨站點腳本問題。我怎樣才能防止使用ESAPI在Java中使用ESAPI編碼器

@POST 
@PATH 
public EmployeeResponse getFilteredEmployees(EmployeeRequest req, @HeaderParam("user") String user) { 
if(user == null) 
    user = req.getEmpId(); 

EmployeeResponse resp = new EmployeeResponse(); 
resp.setEmpName(req.getEmpName); 
//Do something with the resp 

return resp; 
} 
+0

此外,您要在請求標頭中傳遞用戶名。你在做什麼來阻止用戶將你的用戶更改爲「admin」? – avgvstvs

回答

0
@POST 
@PATH 
public EmployeeResponse getFilteredEmployees(EmployeeRequest req, @HeaderParam("user") String user) { 
if(user == null) 
    user = req.getEmpId(); 

EmployeeResponse resp = new EmployeeResponse(); 
resp.setEmpName(req.getEmpName); 
//Do something with the resp 

return resp; 
} 

相同的,所以,這是遭到舉報的理由是,首先,你是不是做對您收到的變量的任何輸入驗證。這是一個合法的用戶ID嗎? )>8*2]U5d)s^deUB|SNJRpT7u=: *8SN:$/wapC"C&dW9 [email protected]*aeZFtPUYqfEk

因爲是書面的,它是。 <script>alert(1);</script>這是一個Cross-Site腳本的教科書案例,' OR 1=1'可能導致SQL注入限制其他一些注意事項。

國防1:Input validation.這是不完整的,但是對於XSS緩解是必需的。

防禦2:輸出正確上下文的編碼。

在您使用的是輸出任何JSP,使用ESAPI標籤庫,並編碼爲proper context.

鏈接的備忘單將讓你開始。至於代碼示例,一些Web框架帶有輸入驗證API,這些可能就足夠了,但是如果使用ESAPI,則會在validation.properties中添加正則表達式,然後使用ESAPI.validator().getValidInput(args...);調用調用該驗證規則。