
HTML Purifier 라이브러리는 XSS 공격을 일으키는 코드를 제거할 수 있다.
XSS 공격을 유발할 수 있는 마크업을 제거하기 위해, 먼저 HTMLPurifier 클래스를 이용하여 HTMLPurifier 객체를 생성한다. 그런 다음 purify() 메서드를 호출한다.
$purifier = new HTMLPurifier(); $text = $purifier->purify($text);
HTMLPurifier 객체는 config라는 속성을 가진다. 이것은 HTML Purifier의 동작 방식을 제어하는 옵션을 구성하는 또 다른 객체를 보유한다. 예를 들어, 허용되는 태그와 속성을 지정할 수 있으며 다른 모든 태그는 제거한다.
HTML Purifier 객체가 생성되면, 두 개의 인수를 갖는 set() 메서드를 사용하여 구성 객체의 설정을 변경할 수 있다.
업데이트하고자 하는 속성
사용해야 하는 값
예를 들어, HTML.Allowed 속성은 허용되는 HTML 태그와 속성을 지정한다.
텍스트에 표시돼도 괜찮은 태그는 쉼표로 구분된 태그 이름(꺾쇠 괄호 없이)의 목록으로 지정해야 한다. 예를 들어, <p>, <br>, <a>, <img> 태그를 허용하려면, HTML.Allowed 속성의 값은 다음과 같다.
p,br,a,img
요소의 속성을 허용하려면, 요소 이름 뒤에 대괄호 안에 속성 이름을 둔다. 하나의 요소에 하나 이상의 속성을 허용하려면, 각 속성을 파이프스템 |으로 구분한다. 예를 들어, <a>와 <img> 태그에서 <a href="">와 <img alt="" src=""> 속성을 허용하려면, HTML.Allowed 속성의 값은 다음과 같다.
p,br,a[href],img[src|alt]
$purifier->config->set('HTML.Allowed', 'p,br,a[href],img[src|alt]');
템플릿 엔진은 데이터를 가져와서 처리하는 PHP 코드와 브라우저로 보내는 HTML 페이지를 만드는 데 사용되는 코드를 분리한다.
사이트가 템플릿 엔진을 사용할 때, 데이터를 가져와서 처리하는 PHP 코드는 동일한 파일에 남는다. 하지만 방문자가 보는 HTML을 생성하게 될 두 번째 부분은 템플릿template이라는 파일로 옮겨진다.
Twig 템플릿은 PHP를 사용하여 데이터를 표시하지 않는다. 예를 들어, PHP에서 $title이라는 변숫값을 출력하기 위해 다음과 같이 한다.
<p><?= htmlspecialchars($title); ?><p>
Twig 템플릿에서는 다음과 같이 사용한다.
<p>{{ title }}<p>
이 중괄호는 Twig에게 title 변수에 저장된 값을 표시해야 한다는 것을 알려준다.
템플릿 엔진으로 Twig를 사용하는 것은 다음과 같은 이유로 사이트의 보안도 향상된다.
템플릿은 상속이라는 기술을 사용하여 코드를 공유할 수 있다. 이것은 파일을 인클루드하는 다른 접근 방식이다. 여는 태그와 닫는 태그가 동일한 파일에 있을 수 있기 때문에, 여러 파일로 분할되지 않아 작업하는 데 도움이 된다.
출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022