2017-05-31 4 views
0

Le code suivant illustre un problème de script intersite dans fortify. Comment puis-je empêcher la même chose en utilisant ESAPIUtilisation de l'encodeur ESAPI en Java

@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

De plus, vous passez le nom de l'utilisateur dans l'en-tête de la demande. Que faites-vous pour empêcher l'utilisateur de changer son utilisateur en "admin" pour votre application? – avgvstvs

Répondre

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; 
} 

Ainsi, la raison pour laquelle cela se trouve en position est que d'abord et avant tout, vous ne faites aucune validation d'entrée sur la variable que vous recevez. Est-ce un userId légal? )>8*2]U5d)s^deUB|SNJRpT7u=: *8SN:$/wapC"C&dW9 [email protected]*aeZFtPUYqfEk

Parce que tel qu'il est écrit, il est. Il en va de même pour <script>alert(1);</script>, qui est un cas d'école pour les scripts inter-sites, et ' OR 1=1' qui pourrait causer l'injection de SQL interdisant quelques autres mises en garde.

Défense 1: Input validation. Ceci est incomplet, mais nécessaire pour l'atténuation XSS. Défense 2: Codage de sortie pour le contexte approprié.

Sur tout JSP que vous utilisez pour la sortie, utilisez les taglibs de ESAPI et encode pour les proper context.

Les feuilles de triche liées vous aider à démarrer. En ce qui concerne les exemples de code, certains frameworks Web sont fournis avec des API de validation d'entrée, mais si vous utilisez ESAPI, vous ajoutez une regex dans validation.properties puis appelez cette règle de validation avec l'appel ESAPI.validator().getValidInput(args...);.