나는이 질문을 잠시 후에 게시했으며 사용자 생성 게시물의 링크를 '연결'하는 데 매우 효과적이라고 생각합니다. Linkify Regex Function PHP Daring Fireball Method링크를 구축 할 때 xss 공격을 완화하십시오.
<?php
if (!function_exists("html")) {
function html($string){
return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}
}
if (false === function_exists('linkify')):
function linkify($str) {
$pattern = '(?xi)\b((?:(http)s?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))';
return preg_replace_callback("#$pattern#i", function($matches) {
$input = $matches[0];
$url = $matches[2] == 'http' ? $input : "http://$input";
return '<a href="' . $url . '" rel="nofollow" target="_blank">' . "$input</a>";
}, $str);
}
endif;
echo "<div>" . linkify(html($row_rsgetpost['userinput'])) . "</div>";
?>
가 나는 사용자가 링크에 컨텐츠를 생성 삽입하여 보안 위험을 도입 할 수 있다는 우려입니다. 나는 이미 htmlspecialchars($string, ENT_QUOTES, 'UTF-8')
으로 데이터베이스에서 오는 사용자 컨텐트를 이스케이프 처리하기 전에 linkify 함수를 실행하고 페이지로 다시 출력하지만 링크 속성을 XSS를 완화하기 위해 특별히 처리해야한다는 OWASP를 읽었습니다. 이 함수는 사용자가 생성 한 내용을 큰 따옴표 안에 넣었으므로 이미 htmlspecialchars($string, ENT_QUOTES, 'UTF-8')
으로 이스케이프 처리되었으므로이 기능이 좋다고 생각합니다. 그러나 이것을 확인하기 위해 xss 전문 지식을 가진 사람에게 정말로 감사 할 것입니다. 감사!
신뢰할 수없는 입력을 href, src 또는 다른 URL 기반 특성에 배치하려는 경우 예기치 않은 프로토콜, 특히 자바 스크립트 링크를 가리 키지 않도록 유효성을 검사해야합니다. 그러면 URL은 다른 모든 데이터와 마찬가지로 디스플레이 컨텍스트를 기반으로 인코딩되어야합니다. 예를 들어, HREF 링크의 사용자 중심 URL은 속성 인코딩되어야합니다. 주어진 예제는 자바이다. PHP로 구현하는 방법을 모르는 경우 ... http://code.google.com/p/owasp-esapi-java/source/browse/trunk/src/main/java/org/owasp/esapi/codecs/PercentCodec.java – Jeff
-1 이것은 당황스러운 일이므로 코드를 테스트해야합니다. – rook
전체 코드와 함께 편집 된 질문을 참조하십시오. – Jeff