Kebetulan selama setahun terakhir saya harus berurusan dengan dukungan teknis untuk hosting, serta dukungan untuk situs yang memiliki hubungan tidak langsung. Dan karena administrator cukup sering menghadapi semua jenis serangan di situs mereka, tanpa memiliki kesempatan untuk menyewa seorang spesialis, terpikir oleh saya untuk datang dengan solusi tunggal dan universal untuk semua situs yang akan membantu mereka melindungi situs mereka tanpa banyak usaha. Dan meskipun masih banyak kekurangan dan nuansa yang belum dapat saya selesaikan, namun ini adalah satu-satunya solusi saat ini yang memungkinkan Anda untuk mengamankan situs dari dalam tanpa menggunakan semua jenis plug-in dan modul yang perlu dipasang dari luar dan yang bahkan pengembang situs web yang tidak berpengalaman dapat menginstal dan mengkonfigurasi di situsnya. Inti dari solusi ini adalah untuk memproses data yang dikirimkan oleh metode GET, POST dan / atau COOKIE, bahkan sebelum mereka diproses dan ditulis langsung ke database.
Pada artikel ini saya akan memberikan contoh penggunaan dan kerugian dari metode tertentu.
Ini kodenya sendiri
$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 {
Contoh di atas hanya menangani permintaan GET. Jadi loop harus diulangi dengan setidaknya POST dan COOKIE. Sayangnya, saya tidak dapat menjalankan solusi ini secara rekursif dalam fungsinya, dan melewatkan semua array $ _GET, $ _POST dan $ _COOKIE yang kami butuhkan pada saat bersamaan. Dan hal yang paling penting yang tidak dapat direalisasikan adalah traversal rekursif dari array multidimensi jenis ini, yang dikaitkan dengan kekhasan transfer data data di dalam fungsi, serta terbatasnya penggunaan variabel variabel.
1) $ v = preg_replace ("'<script [^>] *?>. *? ' Si", "", $ v);
Di sini kita menghapus kode javascript yang tidak perlu secara eksplisit. Suatu fungsi dapat berubah menjadi berlebihan jika Anda masih mengizinkan Anda untuk langsung menyampaikan kode itu sendiri, bukan untuk eksekusi, tetapi untuk pengenalan. Misalnya di forum.
2) $ v = str_replace ($ jsxss, "", $ v);Fungsinya mirip dengan yang pertama, hanya dalam hal ini kami memotong acara yang dapat digunakan untuk serangan xss. Anda dapat sedikit memodifikasi solusi ini dan memotong tidak hanya acara itu sendiri, tetapi konten yang mereka coba lampirkan. Tetapi saya belum melihat perlunya
3) $ v = str_replace (array ("*", "\\"), "", $ v);Dan karakter berbahaya ini, terutama backslash, dapat menyebabkan SQL Anda diretas. Karena simbol itu sendiri jarang digunakan, dan potensi bahayanya cukup tinggi, saya memutuskan untuk menghancurkannya sejak awal.
4) $ v = mysql_real_escape_string ($ v);Menggunakan fungsi ini dapat menyebabkan keluarnya karakter yang tidak perlu, karena kemungkinan besar itu sudah digunakan secara langsung saat menulis data ke database, tetapi di sisi lain, itu akan membantu Anda melindungi diri dari injeksi sql dan melindungi data Anda seperti yang lain. Saat menggunakannya, Anda harus menggunakan fungsi setelah terhubung ke database. Juga, jangan lupa bahwa mysql_real_escape_string tidak digunakan di php 7, dan penggunaan fungsi tersebut sangat tergantung pada metode koneksi. Misalnya, saat menghubungkan ke database melalui mysqli, Anda mungkin perlu menggunakan fungsi mysqli_real_escape_string.
5) $ v = strip_tags ($ v);Strip_tags akan membantu menghapus semua tag yang tidak perlu. Sayangnya, yang diperlukan juga. Parameter kedua Anda dapat menentukan tag yang ingin Anda tinggalkan. Tetapi masalahnya adalah bahwa ada begitu banyak tag yang diperlukan sehingga daftar mereka cukup bermasalah, dan yang paling disayangkan, ada juga tag yang ditambahkan pengembang situs sendiri untuk membuat fungsi tertentu di situs. Tentu saja, akan jauh lebih mudah untuk menentukan tag yang perlu dihapus, dan tidak ditinggalkan. Tetapi kita akan puas dengan apa yang kita miliki. Selain itu, ekspresi reguler dapat digunakan untuk keputusan seperti itu.
6) $ v = htmlentities ($ v, ENT_QUOTES, "UTF-8");
7) $ v = htmlspecialchars ($ v, ENT_QUOTES);Saya pikir kedua fungsi ini tidak perlu disajikan dan satu mirip dengan yang lain, jadi cukup untuk menggunakan salah satunya. Meskipun demikian, mereka jauh dari selalu sesuai.
Saat ini, hanya itu yang berhasil saya kumpulkan. Jika ada yang punya sesuatu untuk melengkapi artikel ini, saya hanya akan senang;)
PS Bagi mereka yang menginginkan solusi dan menawarkan untuk menggunakan PDO, mesin templat, modul server yang berbeda, dll. Saya tidak menyangkal dengan cara apa pun bahwa solusi ini memiliki kekurangannya, dan di suatu tempat itu akan mengubah kesimpulan dan bahkan dapat mempengaruhi fungsi, yang saya tulis di awal posting bahwa solusi tersebut memiliki kelemahannya.
Posting ini bukan untuk programmer, itu untuk administrator situs yang tidak memiliki pengetahuan dan pengalaman untuk mengubah kode dari dalam. Bagi mereka yang tidak ingin, atau tidak bisa, membayar untuk penyelesaian situs. Apa yang sering terjadi ketika pengembang membuat situs web lebih murah pada beberapa CMS yang murah dan seringkali sepenuhnya gratis.
Dan untuk mencegah hal ini terjadi, Anda perlu mengembangkan situs Anda pada CMS yang andal dan tepercaya, dengan dukungan teknis berkualitas tinggi. CMS yang paling cocok dan fungsional untuk mengembangkan proyek semacam itu adalah Bitrix. Memesan dari kami di
https: // wazzup . Hosting dan Lisensi Bitrix, kami siap mengonfigurasi dan menginstal toko secara gratis.
Perlu diketahui juga bahwa kami memiliki penawaran khusus untuk pembelian Lisensi Bitrix, hingga 6 bulan hosting gratis.
Klien kami memilih Bitrix, karena ini adalah satu-satunya sistem manajemen situs terbesar di Federasi Rusia dengan sistem dukungan teknis yang sangat besar dan fungsionalitas yang kuat. Keandalan Bitrix ditentukan tidak hanya oleh waktu, tetapi juga oleh dukungan teknis yang mumpuni dari para programmer, berbeda dengan CMS yang gratis dan murah, pengembangan dan dukungan yang dilakukan oleh penggemar yang terus berubah, tanpa banyak pengalaman.