لقد حدث أنه خلال العام الماضي كان علي التعامل مع الدعم الفني للاستضافة ، وكذلك دعم المواقع التي لدي علاقة غير مباشرة بها. ونظرًا لأن المسؤولين غالباً ما يواجهون جميع أنواع الهجمات على مواقعهم ، دون أن تتاح لي الفرصة لتوظيف متخصص ، فقد صادفني التوصل إلى حل واحد وعالمي لجميع المواقع التي من شأنها مساعدتهم على حماية موقعهم دون بذل مجهود كبير. على الرغم من أنه لا يزال هناك الكثير من السلبيات والفروق الدقيقة التي لم أتمكن من حلها بعد ، إلا أن هذا هو الحل الوحيد في الوقت الحالي الذي يسمح لك بتأمين الموقع من الداخل ، دون اللجوء إلى جميع أنواع المكونات الإضافية والوحدات التي يلزم تثبيتها من الخارج والتي مطور الموقع الذي يفتقر إلى الخبرة قادر على التثبيت والتكوين على موقعه. يكمن جوهر هذا الحل في معالجة البيانات المرسلة بواسطة طرق GET و POST و / أو COOKIE ، حتى قبل معالجتها وكتابتها مباشرة في قاعدة البيانات.
في هذه المقالة سأقدم أمثلة على استخدام وعيوب طريقة معينة.
هنا هو الكود نفسه
$jsxss="onabort,oncanplay,oncanplaythrough,ondurationchange,onemptied,onended,onerror,onloadeddata,onloadedmetadata,onloadstart,onpause,onplay,onplaying,onprogress,onratechange,onseeked,onseeking,onstalled,onsuspend,ontimeupdate,onvolumechange,onwaiting,oncopy,oncut,onpaste,ondrag,ondragend,ondragenter,ondragleave,ondragover,ondragstart,ondrop,onblur,onfocus,onfocusin,onfocusout,onchange,oninput,oninvalid,onreset,onsearch,onselect,onsubmit,onabort,onbeforeunload,onerror,onhashchange,onload,onpageshow,onpagehide,onresize,onscroll,onunload,onkeydown,onkeypress,onkeyup,altKey,ctrlKey,shiftKey,metaKey,key,keyCode,which,charCode,location,onclick,ondblclick,oncontextmenu,onmouseover,onmouseenter,onmouseout,onmouseleave,onmouseup,onmousemove,onwheel,altKey,ctrlKey,shiftKey,metaKey,button,buttons,which,clientX,clientY,detail,relatedTarget,screenX,screenY,deltaX,deltaY,deltaZ,deltaMode,animationstart,animationend,animationiteration,animationName,elapsedTime,propertyName,elapsedTime,transitionend,onerror,onmessage,onopen,ononline,onoffline,onstorage,onshow,ontoggle,onpopstate,ontouchstart,ontouchmove,ontouchend,ontouchcancel,persisted,javascript"; $jsxss = explode(",",$jsxss); foreach($_GET as $k=>$v) { if(is_array($v)) { foreach($v as $Kk=>$Vv) { $Vv = preg_replace ( "'<script[^>]*?>.*?</script>'si", "", $Vv ); $Vv = str_replace($jsxss,"",$Vv); $Vv = str_replace (array("*","\\"), "", $Vv ); $Vv = strip_tags($Vv); $Vv = htmlentities($Vv, ENT_QUOTES, "UTF-8"); $Vv = htmlspecialchars($Vv, ENT_QUOTES); $_GET[$k][$Kk] = $Vv; } } ELSE {
المثال أعلاه يعالج طلبات GET فقط. لذلك يجب تكرار الحلقة باستخدام POST و COOKIE على الأقل. لسوء الحظ ، لم أتمكن من تنفيذ هذا الحل بشكل متكرر في الوظيفة ، وتمرير جميع الصفائف $ _GET و $ _POST و $ _COOKIE التي نحتاجها في الوقت نفسه. وأهم ما لا يمكن إدراكه هو اجتياز صفائف متكررة من صفائف متعددة الأبعاد من هذا النوع ، والتي ترتبط بخصوصية نقل البيانات من البيانات داخل الوظيفة ، وكذلك الاستخدام المحدود للمتغيرات المتغيرة.
1) $ v = preg_replace ("'<script [^>] *؟>. *؟ ' Si"، ""، $ v)؛
هنا نزيل شفرة جافا سكريبت غير الضرورية بشكل صريح. قد تتحول الوظيفة إلى وظيفة غير ضرورية إذا كنت لا تزال تسمح لك بتمرير الكود نفسه مباشرة ، وليس لتنفيذه ، ولكن للمراجعة. على سبيل المثال في المنتديات.
2) $ v = str_replace ($ jsxss، ""، $ v)؛الوظيفة تشبه الوظيفة الأولى ، فقط في هذه الحالة نقوم بقص الأحداث التي يمكن استخدامها لهجمات xss. يمكنك تعديل هذا الحل بشكل طفيف واستبعاد ليس فقط الحدث نفسه ، ولكن المحتوى الذي يحاولون إرفاقه به. لكنني لم أر بعد الحاجة لذلك
3) $ v = str_replace (array ("*"، "\\")، ""، $ v)؛ويمكن أن تتسبب هذه الأحرف الضارة ، خاصة الخط المائل العكسي ، في اختراق SQL الخاص بك. نظرًا لأن الرمز نفسه نادرًا جدًا ، وخطره المحتمل كبير جدًا ، فقد قررت تدميره في مهده.
4) $ v = mysql_real_escape_string ($ v) ؛يمكن أن يسبب استخدام هذه الوظيفة هروبًا غير ضروري من الأحرف ، لأنه على الأرجح يتم استخدامه بالفعل مباشرة عند كتابة البيانات إلى قاعدة البيانات ، ولكن من ناحية أخرى ، سيساعدك على حماية نفسك من حقن sql وحماية بياناتك دون غيرها. عند استخدامه ، يجب عليك استخدام الوظيفة بعد الاتصال بقاعدة البيانات. أيضًا ، دعونا لا ننسى أن mysql_real_escape_string لا يُستخدم في php 7 ، ويعتمد استخدام هذه الوظائف على طريقة الاتصال. على سبيل المثال ، عند الاتصال بقاعدة البيانات عبر mysqli ، قد تحتاج إلى استخدام الدالة mysqli_real_escape_string.
5) $ v = strip_tags ($ v) ؛سوف Strip_tags تساعد على إزالة جميع العلامات غير الضرورية. لسوء الحظ ، الضرورية منها أيضا. المعلمة الثانية التي يمكنك تحديد العلامات التي تريد تركها. لكن المشكلة هي أن هناك الكثير من العلامات الضرورية التي تجعل إدراجها في قائمة الإشكاليات أمرًا مشكوكًا فيه ، والأكثر المؤسف هو وجود علامات من هذا القبيل يضيفها مطورو المواقع من تلقاء أنفسهم لإنشاء وظائف معينة على الموقع. بالطبع ، سيكون أكثر ملاءمة لتحديد العلامات التي يجب إزالتها ، وليس اليسار. لكننا سنكتفي بما لدينا. بالإضافة إلى ذلك ، يمكن استخدام التعبيرات العادية لمثل هذه القرارات.
6) $ v = htmlentities ($ v ، ENT_QUOTES ، "UTF-8") ؛
7) $ v = htmlspecialchars ($ v ، ENT_QUOTES) ؛أعتقد أن هاتين الوظيفتين لا يلزم تقديمهما وواحدة تشبه الأخرى ، لذلك يكفي استخدام واحدة منها. ومع ذلك ، فهي بعيدة عن المناسب دائما.
في الوقت الحالي ، هذا كل ما تمكنت من جمعه. إذا كان لدى أي شخص شيء يكمله هذا المقال ، فسأكون سعيدًا فقط ؛)
سكرتير خاص لأولئك الذين يريدون حلا وعرضوا استخدام PDO ، ومحركات القوالب ، ووحدات الخادم المختلفة ، إلخ. لا أنكر بأي حال من الأحوال أن هذا الحل له عيوبه ، وفي مكان ما سوف يشوه الاستنتاج وقد يؤثر على الوظيفة ، والتي كتبت في بداية المنشور أن لها عيوبها.
هذه المشاركة ليست مخصصة للمبرمجين ، فهي مخصصة لمسؤولي الموقع الذين يفتقرون إلى المعرفة والخبرة لتغيير الرمز من الداخل. بالنسبة لأولئك الذين لا يريدون ، أو لا يستطيعون ، دفع ثمن إكمال المواقع. ما يحدث غالبًا عندما يجعل أحد المطورين مواقع ويب أرخص على بعض CMS غير مكلف ، وغالبًا ما يكون مجانيًا تمامًا.
ولمنع حدوث ذلك ، تحتاج إلى تطوير مواقعك على CMS موثوقة وموثوق بها ، مع دعم فني عالي الجودة. أكثر أنظمة CMS مناسبة ووظيفية لتطوير مثل هذه المشروعات هي Bitrix. طلب منا على
https: // wazzup . استضافة وترخيص Bitrix ، ونحن على استعداد لتكوين وتثبيت المتجر مجانا.
يرجى أيضًا ملاحظة أن لدينا عرضًا خاصًا لشراء ترخيص Bitrix ، وهو ما يصل إلى 6 أشهر من الاستضافة مجانية.
يختار عملاؤنا Bitrix ، لأن هذا هو أكبر نظام لإدارة المواقع في الاتحاد الروسي مع نظام دعم فني ضخم ووظائف قوية. يتم تحديد موثوقية Bitrix ليس فقط من خلال الوقت ، ولكن أيضًا من خلال الدعم الفني المؤهل المستمر للمبرمجين ، على عكس CMS المجانية وغير المكلفة ، والتي يتم تطويرها ودعمها من قبل المتحمسين الذين يتغيرون باستمرار ، دون خبرة كبيرة.