워드프레스 포스트에 책갈피 추가하기
제 워드프레스 사이트의 게시물에 자바스크립트 북마크렛 링크를 추가하려고 합니다.하지만 포스트 프리뷰에는 나오지 않고 있습니다.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 특정 기능과는 반대로).이 문제는 다음을 클릭할 때만 발생합니다.Preview
WordPress에 있는 버튼이며, 해당 초기 페이지 로드에만 해당됩니다.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
'programing' 카테고리의 다른 글
Google Apps Script에서 MySQL SP가 호출되면 갑자기 중단됨 (0) | 2023.10.25 |
---|---|
WordPress에서 페이지 기능이 작동하지 않습니다. (0) | 2023.10.25 |
handle delete가 있는 java jdbi3 DB 업데이트 안 함 (0) | 2023.10.20 |
HTML 양식을 리디렉션 없이 제출하는 방법 (0) | 2023.10.20 |
ASP를 넣습니다.워드프레스 사이트의 NET (0) | 2023.10.20 |