우리는 회사에서 고급 사용자 정의 필드를 사용하고 있으며 때로는 사용자 정의 필드에 단축 코드를 사용해야합니다. 그런 다음 PHP 코드에서 do_shortcode
이러한 필드에 대한 함수입니다. 나중에 필드에 단축 코드를 추가 할 수 있기 때문에 대부분의 필드에 사용하지 않을 이유가 없습니다.
우리 ” 또한 WordPress 코딩 표준 규칙과 함께 PHP CodeSniffer를 사용합니다. echo do_shortcode
를 사용할 때마다 이스케이프 경고가 사라집니다. 따라서 do_shortcode
를 사용하는 것이 안전합니까 아니면 예를 들어 사용해야합니까? wp_kses_post
추가로?
그에 대한 모범 사례가 있습니까?
조언 감사합니다.
댓글
h3>
- do_shortcode는 이스케이프 용이 아닙니다.
- 흠, 그런데 코드 니퍼가 경고를 표시하지 않는 이유는 무엇입니까?
- 아마도 그렇지 않습니다. 단축 코드 렌더링 기능이 출력을 삭제해야하기 때문에 경고를 표시합니다. 그러나 모든 문자열을 함수에 전달할 수 있으며 등록 된 단축 코드가 포함되어 있지 않으면 문자열이 전혀 수정되지 않을 것이라고 확신합니다. ' 확실히 일반적인 위생 방법이 아닙니다. 코드 스니퍼는 많은 일을 할 수 있습니다. 데이터를 올바르게 삭제하는 방법은 여기를 참조하십시오. 많은 기능이 있으며 내가 많이 사용하는 기능은 esc_attr, sanitize_text_field, esc_url입니다. codex.wordpress.org/ …
답변
WordPress 코딩 표준 스 니프는 do_shortcode()
를 “자동 이스케이프 처리 된 함수”로 취급합니다. 이는 2015 년에 다음 GitHub 문제에서 논의 된 것으로 보입니다.
https://github.com/WordPress/WordPress-Coding-Standards/issues/167 https://github.com/WordPress/WordPress-Coding-Standards/issues/428
목록에 추가 될 때 사용한 설명은 다음과 같습니다.
VIP 지원 (# 44195)과이 문제에 대해 논의했습니다. David는 다른 팀원과 협의 한 후 HTML이 방출되는 곳 (짧은 코드의 코드)에서 이스케이프를 수행하므로 불필요하다고 말했습니다.
하지만 그 이유에 동의하지 않습니다. 다음과 같이 사용한 경우 :
<?php echo do_shortcode( "[liveperson]" ); ?>
단축 코드가 하드 코딩 된 위치, 이스케이프 할 유일한 것은 단축 코드의 출력이며 단축 코드 콜백에 의해 이스케이프되어야하기 때문입니다.
그러나 귀하의 상황에서는 do_shortcode()
를 사용하면 사용자가 제공 한 텍스트 내에서 맞춤 입력란의 단축 코드를 실행할 수 있습니다. 해당 텍스트는 이스케이프 처리가 필요하지만 do_shortcode()
는 실제 이스케이프를 수행하지 않습니다.
따라서 이와 같은 필드를 처리하는 안전한 방법은 wp_kses()
또는
, 허용되지 않는 태그를 제거하고 그런 다음 do_shortcode()
를 통해 단축 코드가 ex 다시 이스케이프하지 않고 ecuted.
$text = get_field( "field_name" ); echo do_shortcode( wp_kses_post( $text ) );
코드 스니퍼가보고하지 않는 작업에는 아무런 차이가 없지만 최소한 사용자가 제공 한 텍스트
한 가지 제한은 esc_html()
를 사용하면 단축 코드 속성을 방해하므로 작동하지 않는다는 것입니다. 이러한 삭제는 또한 “레이아웃에 영향을 줄 수있는 불균형 태그를 입력하는 사용자를 방지하지 않습니다. 이는 일반적으로 이스케이프하는 것이 도움이됩니다.이 문제를 해결하려면 다음을 추가 할 수 있습니다. force_balance_tags()
:
$text = get_field( "field_name" ); echo do_shortcode( force_balance_tags( wp_kses_post( $text ) ) );