2017-09-28 13 views
0

내가 지금 무덤 악센트 난독 XSS 공격, 나는 가능한 XSS 공격을 확인

function clean($str) { 
$str = htmlspecialchars(strip_tags(trim(mb_convert_encoding($str, 'UTF-8', 'UTF-8'))), ENT_QUOTES, 'UTF-8'); 
return $str; 
} 

라는 문자열을 청소 여기 내 기능을 가지고 iframe을에서 탈출 할 수없는, 그리고이 하나 <img src"$str">하지만 경우에 확인했다 나는 다음과 같은

$attr = clean("javascript:alert(\"RSnake says, 'XSS'\")"); 
$str = "<iframe src=\"$attr\">"; 

그러나 $str = "<img src=\"$attr\">"; 것이 안전하다고를 사용하여 JS가 실행 된 <iframe src"$str"> 에 요소를 교환.

이 취약점을 어떻게 처리합니까?

나는 다음과 같은 시도이

function clean($str) { 
$str = htmlspecialchars(strip_tags(trim(mb_convert_encoding($str, 'UTF-8', 'UTF-8'))), ENT_QUOTES, 'UTF-8'); 
$str = htmlentities($str, ENT_QUOTES); 
return $str; 
} 

답변

-1

같았다 기능에 대한 여분의 부분을 추가했다 무슨 짓을 :

<?php 

function clean($url) { 
    if (!filter_var($url, FILTER_VALIDATE_URL)) 
     return false; 
    return $url; 
} 
$attr = clean("javascript:alert(\"RSnake says, 'XSS'\")"); 
$str = "<iframe src=\"$attr\">"; 
// $str = "<img src=\"$attr\">"; 

echo($str); 

을 그것은 것이다 그것은 URL과 경우에 인을 기준으로 문자열을 소독 그렇지 않다면, 출력 할 것입니다 false

+1

네, 그게 내가 그것을 해결하려고했는데,하지만 누군가가 htmlent + htmlspec을 사용하여 말한 것을 기억합니다. '& quot quotequot'또는 무엇인가 – AXAI

+0

@AXAI로 변환 할 것입니다. 문자열 만 표시하려면 문제가 없지만 문자열을 기본 형식으로 복원하려면 문제가 발생할 수 있습니다. 그렇지 않으면 괜찮습니다. – mega6382

+1

HTML 파서는 엔티티를 URL 파서에 전달하기 전에 일반 문자로 변환하므로 전혀 도움이되지 않습니다. – Quentin