문제

내 응용 프로그램에서 사용자가 CSS 스타일 시트를 업로드하여 템플릿에 적용 할 수 있도록 허용합니다. CSS는 내부 스타일 시트로 작성되었습니다. 현재 CSS 스타일 시트를 다른 사용자에게 노출시키지 않기 때문입니다.

이는 사용자가 CSS 파일에 악성 코드를 포함시킬 공간을 만듭니다. 처음에 내 계획은 모든 '<'< '및'> '를 변환하는 것이었지만 CSS 구문에는 필요합니다. 원치 않는 캐릭터를 철저하게 제거 할 수는 없기 때문에 White List 솔루션을 따르고 있습니다.

이 시나리오에 대한 보안 조치를 구현하기위한 제안이 있습니까?

도움이 되었습니까?

해결책

또한 최소한 IE 표현식 및 FF -MOZ- 결합 특성을 필터링해야합니다. 둘 다 CSS를 사용하여 (포기적으로 악의적 인) JavaScript를 실행하는 데 사용될 수 있습니다.

이 치트 시트 일부 CSS를 포함하여 가장 명백한 XSS 전술이 포함되어 있습니다.

가장 안전한 솔루션은 아마도 당신이 제안한대로 화이트리스트에있을 것입니다 (화이트리스트 특성 만 사용하도록 사용자가 제한하는 것이 허용되는 경우).

다른 팁

모든 것을 대체하는 필터를 구현했습니다 < 캐릭터 &lt;. 그 이유는 CSS가 필요하지 않기 때문입니다 < 캐릭터; 필요한 유일한 성격은입니다 > 어린이 선택기에 사용됩니다.

이렇게하면 사용자가 악성 코드를 작성하기 위해 태그를 열 수 없습니다.

나는 다른/더 나은 솔루션을 고려하게되어 기쁩니다.

사용자가 CSS 파일을 업로드 할 수 없으며 사용자가 선택한 옵션을 기반으로 CSS 파일을 동적으로 생성하는 인터페이스를 만듭니다. 허용하는 옵션. 그런 다음 FISICAL CSS 파일을 만들거나 해당 구성을 기반으로 CSS를 작성하는 동적 응용 프로그램을 만들 수 있습니다. 이는 서버에 많은 CSS 파일이있는 것을 피할 수 있습니다. CSS를 구문 분석하고 위험한 코드를 거부하는 것보다 허용되는 것을 정의하는 것이 더 쉽습니다.

사용 cdata 그리고 종단 순서를 탈출합니다 (]]>). 그래도 브라우저 호환성에 대해 잘 모르겠습니다.

예제 (비정상적인) :

<?PHP

function strReplaceAll($needle, $replacement, $haystack)
{
    // Check for infinite loop.  (NOT FOOL PROOF!)
    if(strpos($replacement, $needle) === FALSE)
        return;

    $numReplacements = 42;

    while($numReplacements)
    {
        $haystack = str_replace($needle, $replacement, $haystack, &$numReplacements);
    }

    return $haystack;
}

?>

<style type="text/css">
/*
<![CDATA[
*/

<?PHP echo sstrReplaceAll(']]>', '', $userCss); ?>

/*
]]>
*/
</style>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top