2014-11-24 2 views
0


XSS уязвимость при отправке URL в Safari прошивкой

После моего кода получил отсканированы, Отчет показывает уязвимость XSS произошло при попытке открыть веб-страницу в приложении Safari.

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[event objectForKey:@"url"]]]; 

«событие» - это NSDictionary, где я получил через NSURL с моего сервера.

Я понимаю, что, чтобы избежать XSS, вы должны кодировать свой вывод.
, но это испортит URL-адрес, и Safari не сможет открыть правильную веб-страницу?

Или что-то еще вызывает проблему?

Я не знаком с безопасностью, поэтому любые указатели будут оценены.

Заранее благодарен!

+1

Я думаю, это потому, что это динамически созданный URL-адрес, который вы не проверяете, прежде чем передавать его в openURL: – Tim

ответ

0

URL-адрес XSS может отображаться, когда приложение пытается отразить вывод внутри атрибута href.

<a href="DATA_REFLECTS_HERE">DATA_REFLECTS_HERE</a> 

AS Вы можете видеть, что одна и та же переменная может использоваться в двух разных условиях. Первый - внутри href, второй - непосредственно контекст HTML.

Большинство команд XSS-полезных нагрузок (javascript: alert (1) и т. Д.) И смягчение можно найти в следующем примере.

/** 
* XSS protection function for URL context 
* @usecases 
* <a href="use this function if output reflects here">click</a> 
* <img src="use this function if output reflects here"> 
* <iframe src="use this function if output reflects here"> 
* @description 
* Only allows URLs that start with http(s) or ftp. e.g., 
* https://www.google.com 
* Protection against JavaScript, VBScript and Data URI JavaScript code execution etc. 
* @author Ashar Javed 
* @Link https://twitter.com/soaj1664ashar 
* @demo http://xssplaygroundforfunandlearn.netai.net/final.html 
*/ 
function urlContextCleaner($url) { 
    if(preg_match("#^(?:(?:https?|ftp):{1})\/\/[^\"\s\\\\]*.[^\"\s\\\\]*$#iu",(string)$url,$match)) 
    { 
     return $match[0]; 
    } 
    else { 
     $noxss='javascript:void(0)'; 
     return $noxss; 
    } 
} 

Захваченный от: https://github.com/symphonycms/xssfilter/blob/master/lib/xss.php

Beside, вы можете решить эту проблему, не имея слишком много хлопот. Если вы знаете, что URL-адрес может быть http-протоколом, добавьте префикс http (s) в строку в атрибуте href и закодируйте все типы котировок. (Одиночный, двойной и обратный тик)

Для контекста HTML используйте классическую кодировку методы.

Смежные вопросы