programing

워드프레스 포스트에 책갈피 추가하기

minimums 2023. 10. 25. 23:11
반응형

워드프레스 포스트에 책갈피 추가하기

제 워드프레스 사이트의 게시물에 자바스크립트 북마크렛 링크를 추가하려고 합니다.하지만 포스트 프리뷰에는 나오지 않고 있습니다.WordPress가 게시물에 추가하는 링크를 확인하면 다음으로 변환됩니다.javascript:void(0) 이 간단한 예는 문제를 재현합니다.

<a href="javascript:alert('Alert!');">Search Scholar</a>

여기, 여기, 여기, 그리고 여기에 같은 문제를 겪은 사람들이 몇 명 더 있지만, 아무도 사람들이 복사하고 붙여넣고 자신만의 책갈피를 만들 수 있도록 북마크 코드를 부여하는 것 이상의 해결책을 찾지 못한 것 같습니다.

이 문제의 원인은 크롬의 XSS 보호 기능이 wp-admin을 통해 자바스크립트를 제출할 때 링크에서 제거하고 있기 때문입니다.하나의 "해결책"은 선을 추가하는 것입니다.header("X-XSS-Protection: 0");wpgrwpg로.루트 폴더의p.루트 폴더의 php.이것은 워드프레스 사이트에서 XSS 보호 기능을 해제하기 때문에 안전하지 않지만 페이지가 로드될 때 북마크렛 코드를 렌더링할 수 있습니다.

XSS 보호 기능을 끄지 않는 이 문제에 대한 실질적인 해결책이 있습니까?추가할 수 있도록 워드프레스에 설치할 수 있는 플러그인이 있습니까?javascript:내 게시물 안의 링크?

편집 2 많은 연구 끝에, 이것은 실제로 OP가 언급한 것처럼 브라우저의 XSS 감지로 인해 발생합니다(어떤 WordPress 특정 기능과는 반대로).이 문제는 다음을 클릭할 때만 발생합니다.PreviewWordPress에 있는 버튼이며, 해당 초기 페이지 로드에만 해당됩니다.WordPress는 요청 헤더에 있는 HTML 중 일부를 함께 전송하고, 이는 브라우저에서 XSS 기능을 트리거합니다.미리보기를 로드한 다음 페이지를 새로 고치면 XSS 문제가 사라지고javascript:링크가 저장된 상태로 표시됩니다.실제 사이트를 볼 때 페이지를 게시한 후에는 이 XSS 문제가 발생하지 않습니다.

편집(@gnarf와 함께 작업)을 좀 더 깊이 연구한 결과, 실제 문제는 WordPress가 처리하는 방식으로 귀결됩니다.javascript:미리보기 기능의 링크.워드프레스는 모든 것을 실행하고 변환하는 사용자 정의 자바스크립트를 가지고 있는 것 같습니다.javascript:에의 연결.javascript:void(0)링크(사용자 정의 코드 stripping), 페이지를 미리 보는 경우에만 해당됩니다.페이지를 게시한 후,javascript:링크가 적절히 렌더링됩니다.


원본 게시물(WordPress가 제거되지 않도록 하는 방법을 설명합니다.javascript:게시물을 관리자가 아닌 사용자로 저장할 때 링크, 원래 문제가 있었을 것으로 가정)

워드프레스가 HTML을 빼낸 것처럼 보입니다.content_save_pre거름망을 치다구체적으로, 그것은.wp_kses_bad_protocol메소드 인wp-includes\kses.php:

/**
 * Sanitize string from bad protocols.
 *
 * This function removes all non-allowed protocols from the beginning of
 * $string. It ignores whitespace and the case of the letters, and it does
 * understand HTML entities. It does its work in a while loop, so it won't be
 * fooled by a string like "javascript:javascript:alert(57)".
 *
 * @since 1.0.0
 *
 * @param string $string Content to filter bad protocols from
 * @param array $allowed_protocols Allowed protocols to keep
 * @return string Filtered content
 */
function wp_kses_bad_protocol($string, $allowed_protocols) {
    $string = wp_kses_no_null($string);
    $iterations = 0;

    do {
        $original_string = $string;
        $string = wp_kses_bad_protocol_once($string, $allowed_protocols);
    } while ( $original_string != $string && ++$iterations < 6 );

    if ( $original_string != $string )
        return '';

    return $string;
}

$allowed_protocols매개 변수는 다음을 통해 검색됩니다.wp_allowed_protocols()method, 이것은 적용됩니다.kses_allowed_protocols프로토콜 목록으로 필터링합니다.

이 정보를 가지고, 당신은 그 정보에 연결할 수 있을 것입니다.kses_allowed_protocols추가할 필터javascript유효한 것으로 간주됩니다(이는 물론 보안 문제를 열 수 있음을 유의하십시오.

add_filter( 'kses_allowed_protocols', function ($protocols) {
   $protocols[] = 'javascript';
   return $protocols;
});

이 접근 방식의 보안을 강화하는 한 가지 방법은 특정 사용자 또는 특정 역할에 대한 검사를 추가하는 것입니다(기본적으로 이 필터는 관리자 계정에서 실제로 실행되지 않는 것처럼 보이기 때문에 다음을 사용할 수 있습니다).javascript:관리자로서 마음의 내용에 대한 링크)를 허용하기 전에javascript의전의

초기 문제는 물론 이 때문입니다.

사용자 보호를 위해 게시 콘텐츠 영역 내에서 원하지 않는 코드를 방지하는 필터를 제거하는 특별한 WordPress Plugin 없이는 게시 콘텐츠에 자바스크립트를 추가할 수 없습니다.

플러그인을 설치하지 않으려면 다음과 같은 권장 방법을 사용할 수 있습니다.

워드프레스 생성 페이지와 워드프레스 테마 또는 플러그인에 자바스크립트를 추가하는 안전하고 권장되는 방법은 다음과 같습니다.wp_enqueue_script()이 되지 않은 스크립트를 이 기능은 스크립트가 아직 포함되지 않은 경우 스크립트를 포함하며 종속성을 안전하게 처리합니다.

여기에 모든 세부 정보가 있습니다.wp_enqueue_script():

그런 다음, 게시물에 필요한 기능을 포함하는 사용자 정의 자바스크립트 파일을 생성하고 등록해야 합니다.

예를 들어 북마크렛 링크를 인수로 사용하는 함수를 파일에서 만들 수 있습니다.document.write(또는 알려진 요소에 자식 노드를 연결) 현재 위치에 연결합니다.

그런 다음 스크립트를 포함한 후 다음과 같이 게시물에 함수를 호출합니다.

<script type="text/javascript" src="/scripts/myscript.js"></script>
<script type="text/javascript">
<!--
bookmarklet(myLink);
//--></script>

동일한 게시물에 스크립트를 연결하기만 하면 됩니다 - 모든 게시물에 이 스크립트를 사용한다면 헤더에 연결하는 것이 더 나을 수 있습니다 (header.php템플릿 파일, 메타 태그와 스타일시트 링크 사이).

<script type="text/javascript" src="/scripts/myscript.js"></script>

또는 위가 작동하지 않는 경우:

<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/pathto/myscript.js"></script>

또한 만약 그들이src속성은 삭제됩니다. 리치 편집기를 끄려면 대시보드의 사용자 및 개인 옵션으로 이동해야 합니다.

WordPress 글로벌 및 게시물에서 자바스크립트를 사용하는 방법에 대한 출처 및 자세한 정보:

언급URL : https://stackoverflow.com/questions/19844641/adding-bookmarklet-to-wordpress-post

반응형