XSS를 방지하기 위해 출력 된 템플릿 데이터를 이스케이프 처리하는 내장 Magento 도우미가 있습니까?
아니면 그냥 PHP htmlspecialchars
나 htmlentities
함수를 사용해야 합니까?
XSS를 방지하기 위해 출력 된 템플릿 데이터를 이스케이프 처리하는 내장 Magento 도우미가 있습니까?
아니면 그냥 PHP htmlspecialchars
나 htmlentities
함수를 사용해야 합니까?
답변:
상황에 따라 몇 가지 도우미 방법이 있습니다. 모두에 정의되어 있습니다 Mage_Core_Helper_Abstract
뿐만 아니라에서 Mage_Core_Block_Abstract
당신이 그들을 사용할 수 있도록, $this->...()
모든 템플릿 :
escapeHtml()
: 실제로 htmlspecialchars
권장 매개 변수를 사용하여 HTML을 이스케이프합니다 $result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);
.-또한 허용 된 태그의 화이트리스트를 지정하고 배열에서 메소드를 호출하여 모든 요소를 한 번에 이스케이프 할 수 있습니다. 인라인 텍스트에 사용하십시오.quoteEscape()
: 화이트리스트 및 배열 처리가없는 간단한 버전이지만 작은 따옴표뿐만 아니라 큰 따옴표도 이스케이프 처리 하여 HTML 속성 내의 텍스트에 유용 합니다 .jsQuoteEscape()
: 이것은 백 슬래시로 작은 따옴표를 이스케이프 처리합니다. JavaScript에서 문자열 리터럴을 이스케이프 처리하는 데 사용됩니다. 그러나 이것은 안전하지 않습니다 . (@Xorax의 예 :) 'test\\\'+alert("powned");//'
. 백 슬래시를 추가로 이스케이프해야합니다. 대신 사용하십시오 quoteEscape()
!escapeUrl()
:이 방법이 존재하는 이유를 모르겠습니다. URL 인코딩 문자열 이 아니며htmlspecialchars()
매개 변수가없는 평범한 것 입니다. 사용하지 마십시오. 이제까지.
/**
* Escape html entities in url
*
* @param string $data
* @return string
*/
public function escapeUrl($data)
{
return htmlspecialchars($data);
}
관련 메모에는 urlEncode()
URL 인코딩도 적용되지 않지만 base64 대신 적용되는 것이 있습니다. 필요한 것을 정확히 모르는 경우 사용하지 마십시오.
/**
* base64_encode() for URLs encoding
*
* @param string $url
* @return string
*/
public function urlEncode($url)
{
return strtr(base64_encode($url), '+/=', '-_,');
}
네, 이름이 일치하지 않습니다. 모든되면 그 메소드 이름은 계획을 다음했다 somethingEscape()
하지만 그때 누군가가 더 이상 사용하기로 결정 htmlEscape()
하고 urlEscape()
새로운 방법에 찬성하고 잊어 quoteEscape()
하고 jsQuoteEscape()
.
항상 표준 번역 기능을 사용해야합니다
블록 인스턴스에서
<?php echo $this->__('Text goes here'); ?>
다른 곳
<?php echo Mage::helper('core')->__('Text goes here'); ?>
sprintf
PHP에서 사용하는 것과 같은 방식으로 사용하십시오
예 :
<?php $foo = 'rocks'; ?>
<?php echo $this->__('Sonassi %s', $foo); ?>
블록 인스턴스에서
<?php echo $this->escapeHtml('HTML goes here'); ?>
다른 곳
사용 Mage/Core/Helper/Abstract.php
escapeHtml($data, $allowedTags = null)
예 :
<?php echo Mage::helper('core')->escapeHtml('HTML goes here'); ?>
Mage_Core_Block_Abstract::htmlEscape()
Magento v 1.4.0.0-rc1부터 사용되지 않으며 Mage_Core_Block_Abstract::escapeHtml()
대신 사용해야합니다.
$this->__('Hello %s', '<script>alert("XSS!")</script>')
.
클래스 Mage_Core_Block_Abstract
와 Mage_Core_Helper_Abstract
둘 다 동일한 함수를 사용하며 Mage_Core_Helper_Abstract::escapeHtml
구현 내부적으로 HTML 내용이있는 배열에 대한 추가 논리를 구현하는 것 외에도 PHP htmlspecialchars 함수를 사용합니다.
이 함수는 $ this를 통해 모든 블록 및 도우미 클래스에서 액세스 할 수 있으며 함수가 공개되어 있으므로 Mage :: helper ( 'core') 또는 다른 곳의 다른 도우미 클래스를 통해 사용할 수 있습니다.