我的代码扫描完毕后, 该报告显示当我尝试在Safari应用程序中打开网页时发生XSS漏洞。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[event objectForKey:@"url"]]];
'event'是我从服务器通过NSURL获取的NSDictionary。
我理解为避免使用XSS,您应该对输出进行编码。
但这会弄乱网址,Safari无法打开正确的网页?
还是有其他原因造成了这个问题?
我不熟悉安全性,所以任何指针都会受到赞赏。
提前致谢!
答案 0 :(得分:0)
当app尝试反映href属性中的输出时,可以显示基于URL上下文的XSS。
<a href="DATA_REFLECTS_HERE">DATA_REFLECTS_HERE</a>
AS你可以看到同一个变量可以使用2个不同的上下文。第一个是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
此外,你可以毫不费力地解决这个问题。如果您知道url只能是http协议,则在href属性内嵌入http(s)前缀并编码所有类型的引号。(单,双和后退)
对于HTML上下文,只需使用经典编码方法。