मैं अपने प्रयासों की सराहना के लिए धन्यवाद करना चाहते हैं। आपको, अनुकूल समुदाय के सदस्य, अपने परिचालन को कम करने पर विचार करना चाहिए।
) एक समारोह/नियमित/कक्षा/इनपुट (filter_input_array()
, strip_tags()
, str_ireplace()
, trim()
, आदि छानने के लिए विधि है ...)। आप उन फ़ंक्शंस बनाना चाहते हैं जो फ़िल्टरिंग करने के लिए लूप का उपयोग करते हैं। डबल एन्कोडिंग, एक बार-स्ट्रिप-स्पूफिंग, और अधिक जैसे ट्रिक्स strip_tags()
जैसी चीजों के एकल उपयोग को हरा सकते हैं।
यहां मेरे Sanitizer
कक्षा से strip_tags()
रैपर विधि है। ध्यान दें कि यह पुराने मान की तुलना नए मान से कैसे करता है यह देखने के लिए कि वे बराबर हैं या नहीं। यदि वे बराबर नहीं हैं, तो यह strip_tags()
का उपयोग करता रहता है। हालांकि, इस विधि को निष्पादित करने से पहले प्रारंभिक INPUT_POST/$ _POST जांच की गई है। trim()
का उपयोग करके इसका एक और संस्करण वास्तव में इस से पहले निष्पादित किया जाता है।
private function removeHtml(&$value)
{
if (is_scalar($value)) {
do {
$old = $value;
$value = strip_tags($value);
if ($value === $old) {
break;
}
} while(1);
} else if (is_array($value) && !empty($value)) {
foreach ($value as $field => &$string) {
do {
$old = $string;
$string = strip_tags($string);
if ($string === $old) {
break;
}
} while (1);
}
} else {
throw new Exception('The data being HTML sanitized is neither scalar nor in an array.');
}
return;
}
) इनपुट (filter_var_array()
, preg_match()
, mb_strlen
, आदि सत्यापित करने का एक और एक है ...)
फिर, अपने डेटा संदर्भों स्विच करने के लिए की जरूरत है जब ...
एक) डेटाबेस के लिए, तैयार बयान (PDO
, अधिमानतः) का उपयोग करें।
बी) लौटने/ब्राउज़र को संचारण उपयोगकर्ता इनपुट के लिए, htmlentities()
या htmlspecialchars
तदनुसार साथ उत्पादन भाग जाते हैं।
जादू उद्धरण के संदर्भ में, करने के लिए सबसे अच्छी बात यह है कि php.ini
में अक्षम करें।
अब, उन विभिन्न संरचनाओं के साथ जिम्मेदारी के अपने क्षेत्र हैं, आपको बस अपने हैंडलर फ़ाइल के अंदर तर्क और डेटा के प्रवाह का प्रबंधन करना है। इसमें उपयोगकर्ता को त्रुटि संदेश (जब आवश्यक हो) प्रदान करना और त्रुटियों/अपवादों को संभालना शामिल है।
htmlentities()
या htmlspecialchars
का उपयोग करने की आवश्यकता नहीं है यदि डेटा HTML फॉर्म से सीधे डेटाबेस में जा रहा है। डेटा से बचने का बिंदु इसे नए संदर्भ के अंदर निष्पादन योग्य निर्देशों के रूप में व्याख्या करने से रोकने के लिए है। कोई संदेह नहीं है htmlentities()
या htmlspecialchars
SQL क्वेरी इंजन में डेटा पास करते समय हल हो सकता है (यही कारण है कि आप इनपुट को फ़िल्टर और मान्य करते हैं, और (PDO
) तैयार कथन का उपयोग करते हैं)।
हालांकि, डेटा के बाद डेटाबेस तालिकाओं औरहै से लिया गया है सीधे ब्राउज़र के लिए किस्मत में, ठीक है, अब htmlentities()
या htmlspecialchars
का उपयोग करें। function
बनाएं जो उस परिदृश्य को संभालने के लिए for
या foreach
लूप का उपयोग करता है।
यहाँ मेरी Escaper
वर्ग
public function superHtmlSpecialChars($html)
{
return htmlspecialchars($html, ENT_QUOTES | ENT_HTML5, 'UTF-8', false);
}
public function superHtmlEntities(&$html)
{
$html = htmlentities($html, ENT_QUOTES | ENT_HTML5, 'UTF-8', false);
}
public function htmlSpecialCharsArray(array &$html)
{
foreach ($html as &$value) {
$value = $this->superHtmlSpecialChars($value);
}
unset($value);
}
public function htmlEntitiesArray(array &$html)
{
foreach ($html as &$value) {
$this->superHtmlEntities($value);
}
unset($value);
}
आप अपनी खुद की व्यक्तिगत पसंद और स्थिति के लिए अपने कोड से तैयार करना होगा से एक टुकड़ा है।
ध्यान दें, यदि आप इसे ब्राउज़र को भेजने से पहले डेटा संसाधित पर योजना, पहले प्रसंस्करण करते हैं, तो अपने काम-बांका htmlentities()
या htmlspecialchars
पाशन समारोह के साथ भाग जाते हैं।
आप इसे कर सकते हैं! दोनों strip_tags() and htmlentities or htmlspecialchars().
1. के लिए
तैयार बयान का उपयोग करना काफी सुरक्षित है और किसी भी तरह से अपने डेटा से बचने के लिए आप की आवश्यकता नहीं है। एस्केपिंग केवल तभी जरूरी है जब आप इनपुट डेटा के साथ अपने एसक्यूएल प्रश्नों को जोड़ रहे हों, जो तैयार वक्तव्य का उपयोग करते समय मामला नहीं है। –
डीबीएमएस अपेक्षित डेटा प्रकार और एन्कोडिंग के आधार पर तैयार कथन में दिए गए पैरामीटर को स्वचालित रूप से स्वच्छ कर देगा। यदि आप मैन्युअल रूप से स्ट्रिंग से बच रहे हैं और फिर इसे एक तैयार कथन पैरामीटर के रूप में भेज रहे हैं तो आप वास्तव में इसे कम सुरक्षित बना रहे हैं। – apokryfos
यदि आपके पास समय है, तो अपने डेटाबेस इंटरैक्शन को संभालने के लिए 'पीडीओ' का उपयोग करना सीखें। http://php.net/manual/en/book.pdo.php –