2013-07-18 5 views
2

을 나는 펄이 같은 필터를 썼다는 HTML에서 도움이 필요 :: tagFilter

my $tf = HTML::TagFilter->new(
      allow => { 
       img => { src => [] }, 
       b => { all => [] }, 
       i => { all => [] }, 
       em => { all => [] }, 
       u => { all => [] }, 
       s => { all => [] } 
      } 
     ); 

$message_body = $tf->filter($message_body); 

지금 내가 지정된 태그를 허용하고 할이 필터에서 필요하고, IMG의 src 속성을 허용 할 수 있습니다. 이 코드는 <img src="cid:img.png" alt="Smiley face">과 같은 태그를 제외하고는 훌륭한 결과를 제공합니다. <img src="sid:imp.png"> 대신 <img>을 반환합니다. 내가 원하는 것은 무엇이든지, 왜 여기에있는 이유는 무엇입니까?!

<img src="cid:img.png"> 

답변

0

당신은 skip_xss_protection 1로 설정해야합니다. 값 cid:img.png은 잘못된 URL로 거부되므로 속성이 제거됩니다.

이 주위에 얻을 수있는 tidiest 방법은 다음과 같이 cid을 포함하는 유효한 프로토콜의 목록을 확장하는 것입니다

my @protocols = $tf->xss_permitted_protocols; 
push @protocols, 'cid'; 
$tf->xss_permitted_protocols(@protocols); 

$message_body = $tf->filter($message_body); 

당신이 다음 반환 된 값을 검사 할 수있는 HTML::TagFilter 개체를 만들 때 log_rejects => 1을 설정하는 경우 $tf->report에 의해 HTML의 각 구성 요소를 거부하는 모듈의 이유를 확인하십시오.

+0

답변이 훌륭했습니다. –

2

당신의 src 속성이 통과되지 않는 이유 때문에 모듈의 크로스 사이트 스크립팅 보호입니다 :

#!/usr/bin/perl 

use strict; 
use warnings; 
use HTML::TagFilter; 

my $tf = HTML::TagFilter->new(
      allow => { 
       img => {src => []}, 
       b => { all => [] }, 
       i => { all => [] }, 
       em => { all => [] }, 
       u => { all => [] }, 
       s => { all => [] } 
      }, 
      skip_xss_protection => 1, 
     ); 

my $html = qq{<img src="cid:img.png" alt="Smiley face">}; 

$html = $tf->filter($html); 
print $html; 

인쇄 :

+0

답변이 훌륭했습니다. –