มีตัวช่วย Magento ในตัวเพื่อหลีกเลี่ยงข้อมูลแม่แบบที่ส่งออกเพื่อป้องกัน XSS หรือไม่
หรือฉันควรใช้ PHP htmlspecialcharsหรือhtmlentitiesฟังก์ชั่น?
มีตัวช่วย Magento ในตัวเพื่อหลีกเลี่ยงข้อมูลแม่แบบที่ส่งออกเพื่อป้องกัน XSS หรือไม่
หรือฉันควรใช้ PHP htmlspecialcharsหรือhtmlentitiesฟังก์ชั่น?
คำตอบ:
มีวิธีการช่วยเหลือหลายวิธีขึ้นอยู่กับบริบท ทั้งหมดถูกกำหนดไว้Mage_Core_Helper_Abstractแต่ยังอยู่ในMage_Core_Block_Abstractดังนั้นคุณสามารถใช้พวกเขากับ$this->...()ในทุกแม่แบบ:
escapeHtml(): จริง ๆ แล้วมันใช้ประโยชน์จากhtmlspecialcharsพารามิเตอร์ที่แนะนำเพื่อหลบหนี HTML: $result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);- นอกจากนี้คุณสามารถระบุรายการที่อนุญาตของแท็กที่อนุญาตและเรียกวิธีการในอาร์เรย์เพื่อหลบหนีองค์ประกอบทั้งหมดในครั้งเดียว ใช้สิ่งนี้สำหรับข้อความอินไลน์ใด ๆquoteEscape(): รุ่นที่เรียบง่ายโดยไม่ต้องรายการที่อนุญาตและประมวลผลที่หลากหลาย แต่คนนี้หนีราคาเดียวเช่นเดียวกับคำพูดคู่ที่มีประโยชน์สำหรับข้อความภายในแอตทริบิวต์แบบ HTMLjsQuoteEscape(): อันนี้หนีเครื่องหมายคำพูดเดี่ยวด้วยแบ็กสแลช มันถูกใช้เพื่อหลบหนีตัวอักษรสตริงใน 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และการใช้งานของมันนั้นใช้ฟังก์ชั่น PHP htmlspecialchars นอกเหนือจากการใช้ตรรกะ aditional สำหรับอาร์เรย์ที่มีเนื้อหา HTML
ฟังก์ชั่นนี้สามารถเข้าถึงได้ในทุกคลาสของ block และ helper ผ่าน $ this และเนื่องจากฟังก์ชั่นนี้เป็นแบบสาธารณะคุณสามารถใช้มันผ่าน Mage :: helper ('core') หรือคลาส helper อื่น ๆ ได้ทุกที่
สำหรับการแปลงภาษาสเปน:
$value = str_replace(array("<", ">"), array("<", ">"), htmlspecialchars("Lorem ipsum >", ENT_COMPAT, "UTF-8", false));