    {"id":2933,"date":"2024-05-18T08:13:39","date_gmt":"2024-05-18T08:13:39","guid":{"rendered":"https:\/\/student-activity.binus.ac.id\/csc\/?p=2933"},"modified":"2024-09-22T05:07:27","modified_gmt":"2024-09-22T05:07:27","slug":"common-security-vulnerability-php","status":"publish","type":"post","link":"https:\/\/student-activity.binus.ac.id\/csc\/2024\/05\/common-security-vulnerability-php\/","title":{"rendered":"Common Security Vulnerability PHP"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3085\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/php-programming-html-coding-cyberspace-concept.jpg\" alt=\"\" width=\"2880\" height=\"2880\" \/><\/p>\n<p><span style=\"font-weight: 400\">PHP (<\/span><i><span style=\"font-weight: 400\">Hypertext Preprocessor<\/span><\/i><span style=\"font-weight: 400\">) adalah sebuah bahasa pemrograman <\/span><i><span style=\"font-weight: 400\">scripting <\/span><\/i><span style=\"font-weight: 400\">yang berjalan pada <\/span><i><span style=\"font-weight: 400\">server <\/span><\/i><span style=\"font-weight: 400\">atau biasa dikenal dengan <\/span><i><span style=\"font-weight: 400\">server side rendering<\/span><\/i><span style=\"font-weight: 400\">. Seperti pada bahasa pemrograman lainnya, PHP memiliki <\/span><i><span style=\"font-weight: 400\">syntax <\/span><\/i><span style=\"font-weight: 400\">penulisannya sendiri serta fitur-fitur tertentu seperti <\/span><i><span style=\"font-weight: 400\">data processing<\/span><\/i><span style=\"font-weight: 400\">, <\/span><i><span style=\"font-weight: 400\">form validation<\/span><\/i><span style=\"font-weight: 400\">, <\/span><i><span style=\"font-weight: 400\">upload file<\/span><\/i><span style=\"font-weight: 400\">, <\/span><i><span style=\"font-weight: 400\">session management<\/span><\/i><span style=\"font-weight: 400\">, <\/span><i><span style=\"font-weight: 400\">send email<\/span><\/i><span style=\"font-weight: 400\">, dan komunikasi dengan MySQL, PostgreSQL, MongoDB, SQlite, lalu <\/span><i><span style=\"font-weight: 400\">support<\/span><\/i><span style=\"font-weight: 400\"> untuk banyak protocol seperti XML, JSON, SOAP, REST. Dilansir dari W3Techs per 2 februari 2024, secara statistik PHP menempati bahasa pemrograman yang paling banyak dipakai diantara bahasa lainnya dengan statistik 76.5%. Disamping penggunaannya banyak digunakan, PHP memiliki banyak kerentanan, berikut beberapa contoh kerentanan pada vanilla PHP:<\/span><\/p>\n<ol>\n<li><strong> SQL <i>Injection<\/i><\/strong><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">SQL <\/span><i><span style=\"font-weight: 400\">injection <\/span><\/i><span style=\"font-weight: 400\">merupakan suatu <\/span><i><span style=\"font-weight: 400\">vulnerability <\/span><\/i><span style=\"font-weight: 400\">yang memanfaatkan atau memanipulasi atau merubah <\/span><i><span style=\"font-weight: 400\">payload query <\/span><\/i><span style=\"font-weight: 400\">yang dijalankan untuk dapat membaca\/manipulasi\/mengakses data dari <\/span><i><span style=\"font-weight: 400\">database<\/span><\/i><span style=\"font-weight: 400\">.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Contoh implementasi serangan SQL <\/span><i><span style=\"font-weight: 400\">injection <\/span><\/i><span style=\"font-weight: 400\">pada <\/span><i><span style=\"font-weight: 400\">code <\/span><\/i><span style=\"font-weight: 400\">PHP:\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/github.com\/jonathansantoso\/csc_phpVuln\/tree\/sqli\"><span style=\"font-weight: 400\">https:\/\/github.com\/jonathansantoso\/csc_phpVuln\/tree\/sqli<\/span><\/a><span style=\"font-weight: 400\"> pada <\/span><i><span style=\"font-weight: 400\">branch <\/span><\/i><span style=\"font-weight: 400\">\u201csqli\u201d github <\/span><i><span style=\"font-weight: 400\">repository <\/span><\/i><span style=\"font-weight: 400\">berikut terdapat <\/span><i><span style=\"font-weight: 400\">code <\/span><\/i><span style=\"font-weight: 400\">PHP yang rentan dengan SQL <\/span><i><span style=\"font-weight: 400\">Injection <\/span><\/i><span style=\"font-weight: 400\">\u00a0dan pada <\/span><i><span style=\"font-weight: 400\">branch<\/span><\/i><span style=\"font-weight: 400\"> \u201csqli_patched\u201d terdapat versi <\/span><i><span style=\"font-weight: 400\">secure <\/span><\/i><span style=\"font-weight: 400\">atau versi <\/span><i><span style=\"font-weight: 400\">patched<\/span><\/i><span style=\"font-weight: 400\">-nya.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2934\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture1.png\" alt=\"\" width=\"271\" height=\"332\" \/><\/p>\n<p><span style=\"font-weight: 400\">Berikut ini merupakan <\/span><i><span style=\"font-weight: 400\">source code <\/span><\/i><span style=\"font-weight: 400\">dari \u201ccontroller.php\u201d yang terdapat pada <\/span><i><span style=\"font-weight: 400\">link <\/span><\/i><span style=\"font-weight: 400\">github diatas:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2935\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture2.png\" alt=\"\" width=\"755\" height=\"578\" \/><\/p>\n<p><span style=\"font-weight: 400\">Pada <\/span><i><span style=\"font-weight: 400\">code<\/span><\/i><span style=\"font-weight: 400\"> tersebut terdapat <\/span><i><span style=\"font-weight: 400\">payload query <\/span><\/i><span style=\"font-weight: 400\">sebagai berikut<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">$query = &#8220;SELECT * FROM USERS where username = &#8216;$username&#8217; and password = &#8216;$password'&#8221;;<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">Dimana pada <\/span><i><span style=\"font-weight: 400\">query <\/span><\/i><span style=\"font-weight: 400\">ini akan memilih atau mengambil semua data dari tabel \u201cUSERS\u201d dan melakukan validasi dimana \u201cusername\u201d dan \u201cpasswordnya\u201d dicocokan dengan \u201c$username\u201d dan \u201c$password\u201d yang merupakan <\/span><i><span style=\"font-weight: 400\">input <\/span><\/i><span style=\"font-weight: 400\">dari <\/span><i><span style=\"font-weight: 400\">user<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Secara singkat SQL <\/span><i><span style=\"font-weight: 400\">Injection <\/span><\/i><span style=\"font-weight: 400\">akan dilakukan dengan merubah <\/span><i><span style=\"font-weight: 400\">logic query <\/span><\/i><span style=\"font-weight: 400\">yang ada seperti pada bagian \u201cusername\u201d dimasukan petik ( \u2018 ) sehingga <\/span><i><span style=\"font-weight: 400\">payload <\/span><\/i><span style=\"font-weight: 400\">akan menjadi seperti berikut<\/span><\/p>\n<p><span style=\"font-weight: 400\">SELECT * FROM USERS where username = &#8216; &#8216; &#8216; and password = &#8216;$password&#8217;.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Pada <\/span><i><span style=\"font-weight: 400\">query <\/span><\/i><span style=\"font-weight: 400\">ini akan terdapat <\/span><i><span style=\"font-weight: 400\">broken logic <\/span><\/i><span style=\"font-weight: 400\">karena kelebihan 1 petik pada bagian username=&#8217; &#8216; &#8216;\u00a0 dengan begitu kita dapat memanfaatkan <\/span><i><span style=\"font-weight: 400\">broken logic <\/span><\/i><span style=\"font-weight: 400\">tersebut dengan menggunakan <\/span><i><span style=\"font-weight: 400\">comment <\/span><\/i><span style=\"font-weight: 400\">pada SQL <\/span><i><span style=\"font-weight: 400\">language <\/span><\/i><span style=\"font-weight: 400\">yaitu \u2018&#8211; -\u2019 atau \u2018#\u2019 sehingga sisa <\/span><i><span style=\"font-weight: 400\">query <\/span><\/i><span style=\"font-weight: 400\">di belakangnya tidak dijalankan. Maka <\/span><i><span style=\"font-weight: 400\">payload <\/span><\/i><span style=\"font-weight: 400\">akan menjadi seperti berikut ketika memasukan \u2018# pada kolom \u201cusername\u201d<\/span><\/p>\n<p><span style=\"font-weight: 400\">SELECT * FROM USERS where username = &#8221;# &#8216; and password = &#8216;$password&#8217;<\/span><\/p>\n<p><span style=\"font-weight: 400\">Maka sisa payload setelah comment (#) tidak akan dijalankan\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">SELECT * FROM USERS where username = &#8221;# <\/span><span style=\"font-weight: 400\">&#8216; and password = &#8216;$password&#8217;<\/span><\/p>\n<p><span style=\"font-weight: 400\">Setelah itu, <\/span><i><span style=\"font-weight: 400\">common payload <\/span><\/i><span style=\"font-weight: 400\">yg digunakan untuk melakukan <\/span><i><span style=\"font-weight: 400\">bypass <\/span><\/i><span style=\"font-weight: 400\">login adalah dengan menambahkan <\/span><i><span style=\"font-weight: 400\">logic \u201c <\/span><\/i><span style=\"font-weight: 400\">OR 1=1 <\/span><i><span style=\"font-weight: 400\">\u201d<\/span><\/i><span style=\"font-weight: 400\">. Maka maka <\/span><i><span style=\"font-weight: 400\">payload <\/span><\/i><span style=\"font-weight: 400\">yg dijalankan adalah sebagai berikut<\/span><\/p>\n<p><span style=\"font-weight: 400\">SELECT * FROM USERS where username = &#8221; OR 1=1 #\u00a0 <\/span><span style=\"font-weight: 400\">&#8216; and password = &#8216;$password&#8217;<\/span><\/p>\n<p><span style=\"font-weight: 400\">Dengan begini maka <\/span><i><span style=\"font-weight: 400\">payload <\/span><\/i><span style=\"font-weight: 400\">akan dijalankan dengan validasi \u201cusername\u201d sama dengan kosong (<\/span><i><span style=\"font-weight: 400\">null<\/span><\/i><span style=\"font-weight: 400\">) atau 1=1 (<\/span><i><span style=\"font-weight: 400\">true<\/span><\/i><span style=\"font-weight: 400\">). <\/span><i><span style=\"font-weight: 400\">Payload <\/span><\/i><span style=\"font-weight: 400\">ini juga memanfaatkan gerbang logika OR dimana ketika salah satu datanya <\/span><i><span style=\"font-weight: 400\">true <\/span><\/i><span style=\"font-weight: 400\">maka hasilnya akan <\/span><i><span style=\"font-weight: 400\">true<\/span><\/i><span style=\"font-weight: 400\">, sehingga validasi \u201cusername\u201d pada <\/span><i><span style=\"font-weight: 400\">payload <\/span><\/i><span style=\"font-weight: 400\">akan bernilai <\/span><i><span style=\"font-weight: 400\">true<\/span><\/i><span style=\"font-weight: 400\">. Dengan validasi bernilai <\/span><i><span style=\"font-weight: 400\">true <\/span><\/i><span style=\"font-weight: 400\">ini maka kita dapat langsung login tanpa mengetahui <\/span><i><span style=\"font-weight: 400\">username<\/span><\/i><span style=\"font-weight: 400\">, karena apapun yang kita masukan akhirnya akan bernilai <\/span><i><span style=\"font-weight: 400\">true<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Hal ini dapat terjadi karena kesalahan pada <\/span><i><span style=\"font-weight: 400\">design code<\/span><\/i><span style=\"font-weight: 400\"> dimana <\/span><i><span style=\"font-weight: 400\">query<\/span><\/i><span style=\"font-weight: 400\"> atau <\/span><i><span style=\"font-weight: 400\">payload <\/span><\/i><span style=\"font-weight: 400\">yang dibuat langsung mengambil <\/span><i><span style=\"font-weight: 400\">username<\/span><\/i><span style=\"font-weight: 400\"> dan<\/span><i><span style=\"font-weight: 400\"> password <\/span><\/i><span style=\"font-weight: 400\">sebagai suatu input dan digabungkan ke dalam<\/span><i><span style=\"font-weight: 400\"> query <\/span><\/i><span style=\"font-weight: 400\">yang akan dijalankan, sehingga ketika memasukan <\/span><i><span style=\"font-weight: 400\">command <\/span><\/i><span style=\"font-weight: 400\">SQL <\/span><i><span style=\"font-weight: 400\">language <\/span><\/i><span style=\"font-weight: 400\">maka akan ikut tereksekusi.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Lalu untuk mencegah SQL<\/span><i><span style=\"font-weight: 400\"> injection<\/span><\/i><span style=\"font-weight: 400\"> ini dapat menggunakan <\/span><i><span style=\"font-weight: 400\">prepared statement<\/span><\/i><span style=\"font-weight: 400\">, dimana <\/span><i><span style=\"font-weight: 400\">query <\/span><\/i><span style=\"font-weight: 400\">yang kita siapkan akan dijalankan terlebih dahulu dan menunggu <\/span><i><span style=\"font-weight: 400\">input username <\/span><\/i><span style=\"font-weight: 400\">dan <\/span><i><span style=\"font-weight: 400\">password <\/span><\/i><span style=\"font-weight: 400\">dari <\/span><i><span style=\"font-weight: 400\">user<\/span><\/i><span style=\"font-weight: 400\">. Bedanya disini adalah <\/span><i><span style=\"font-weight: 400\">query <\/span><\/i><span style=\"font-weight: 400\">atau <\/span><i><span style=\"font-weight: 400\">payload <\/span><\/i><span style=\"font-weight: 400\">kita sudah dalam proses sehingga <\/span><i><span style=\"font-weight: 400\">username <\/span><\/i><span style=\"font-weight: 400\">dan <\/span><i><span style=\"font-weight: 400\">password <\/span><\/i><span style=\"font-weight: 400\">yang kita input akan tetap dianggap sebuah <\/span><i><span style=\"font-weight: 400\">string <\/span><\/i><span style=\"font-weight: 400\">apapun yang kita masukan dan tidak akan diproses atau dieksekusi oleh <\/span><i><span style=\"font-weight: 400\">server<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Contoh penerapannya adalah sebagai berikut:<\/span><\/p>\n<p><span style=\"font-weight: 400\">$query = &#8220;SELECT * FROM USERS where username = &#8216;$username&#8217; and password = &#8216;$password'&#8221;;<\/span><\/p>\n<p><span style=\"font-weight: 400\">$res = $db-&gt;prepare(&#8220;SELECT * FROM USERS where username = ? and password = ?&#8221;);<\/span><\/p>\n<p><span style=\"font-weight: 400\">$res-&gt;bind_param(&#8220;ss&#8221;, $username, $password);<\/span><\/p>\n<p><span style=\"font-weight: 400\">$res-&gt;execute();<\/span><\/p>\n<p><span style=\"font-weight: 400\">$result = $res-&gt;get_result();<\/span><\/p>\n<ol start=\"2\">\n<li><strong> CSRF Attack<\/strong><\/li>\n<\/ol>\n<p><i><span style=\"font-weight: 400\">Cross Site Request Forgery<\/span><\/i><span style=\"font-weight: 400\"> (CSRF) adalah sebuah serangan yang memaksa <\/span><i><span style=\"font-weight: 400\">user <\/span><\/i><span style=\"font-weight: 400\">yang sudah ter <\/span><i><span style=\"font-weight: 400\">authenticated <\/span><\/i><span style=\"font-weight: 400\">\u00a0pada suatu aplikasi melakukan aksi tanpa sepengetahuan pengguna, umumnya serangan ini terjadi ketika <\/span><i><span style=\"font-weight: 400\">user <\/span><\/i><span style=\"font-weight: 400\">mengunjungi suatu <\/span><i><span style=\"font-weight: 400\">website<\/span><\/i><span style=\"font-weight: 400\">\/aplikasi eksternal mengunjungi baik sengaja atau tidak sengaja yang sudah disiapkan sedemikian rupa untuk melakukan <\/span><i><span style=\"font-weight: 400\">malicious request<\/span><\/i><span style=\"font-weight: 400\"> seakan-akan korban yang login melakukan request tersebut.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Syarat dari serangan ini adalah <\/span><i><span style=\"font-weight: 400\">request <\/span><\/i><span style=\"font-weight: 400\">pada <\/span><i><span style=\"font-weight: 400\">malicious website <\/span><\/i><span style=\"font-weight: 400\">harus mengikuti <\/span><i><span style=\"font-weight: 400\">request website <\/span><\/i><span style=\"font-weight: 400\">asli-nya baik dalam sisi parameter yang dikirim, http <\/span><i><span style=\"font-weight: 400\">request header<\/span><\/i><span style=\"font-weight: 400\">, dll. Jika terdapat perbedaan akan gagal dalam melakukan serangan ini.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Sebagai contoh pada <\/span><a href=\"https:\/\/github.com\/jonathansantoso\/csc_phpVuln\/tree\/sqli\"><span style=\"font-weight: 400\">https:\/\/github.com\/jonathansantoso\/csc_phpVuln\/tree\/sqli<\/span><\/a><span style=\"font-weight: 400\"> repo yang sama terdapat fitur mengganti <\/span><i><span style=\"font-weight: 400\">username <\/span><\/i><span style=\"font-weight: 400\">dengan tampilan seperti ini\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2936\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture3.png\" alt=\"\" width=\"617\" height=\"235\" \/><span style=\"font-weight: 400\">Dan <\/span><i><span style=\"font-weight: 400\">source code<\/span><\/i><span style=\"font-weight: 400\"> nya akan terlihat seperti ini:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2937\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture4.png\" alt=\"\" width=\"624\" height=\"449\" \/><\/p>\n<p><span style=\"font-weight: 400\">Dan controllernya akan terlihat seperti ini:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2938\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture5.png\" alt=\"\" width=\"624\" height=\"459\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2939\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture6.png\" alt=\"\" width=\"624\" height=\"111\" \/><\/p>\n<p><span style=\"font-weight: 400\">Untuk <\/span><i><span style=\"font-weight: 400\">testing <\/span><\/i><span style=\"font-weight: 400\">serangan CSRF kita akan membuat suatu imitasi dari request changeUsername yang berasal dari csc_phpVuln_fake file maliciousRequest.php, yang akan mengarahkan request-nya ke csc_phpVuln yang asli.\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2940\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture7.png\" alt=\"\" width=\"624\" height=\"367\" \/><\/p>\n<p><span style=\"font-weight: 400\">Jika di eksekusi di eksekusi pada malicious website dengan catatan terdapat user yang sedang login, akan mengganti username dari user yang login dengan apapun yang di request oleh malicious website.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2941\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture8.png\" alt=\"\" width=\"624\" height=\"348\" \/><\/p>\n<p><span style=\"font-weight: 400\">Misal username-nya jadi bernama testbro, pada point of view korban jika refresh, akan mengganti username sesuai yang di request dari malicious website.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2942\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture9.png\" alt=\"\" width=\"624\" height=\"200\" \/><\/p>\n<p><span style=\"font-weight: 400\">Itu adalah <\/span><i><span style=\"font-weight: 400\">flow<\/span><\/i><span style=\"font-weight: 400\"> manual bagaimana serangan CSRF bisa terjadi, serangan umum pada CSRF adalah ketika korban tidak sengaja redirect ke website malicious yang sudah dibuat sedemikian rupa agar berjalan dibelakang layar, contoh serangan yang mungkin terjadi adalah penghapusan account, melakukan transaksi, ganti password, kirim pesan, dll<\/span><\/p>\n<p><span style=\"font-weight: 400\">Lalu bagaimana cara mengatasi masalah ini? Terdapat berbagai cara untuk mengatasi serangan ini, cara pertama dan paling umum digunakan adalah dengan generate token CSRF dan kirim token tersebut setiap melakukan request, kurang lebih bentuknya akan seperti ini: bisa dilihat pada form change profile, akan melakukan generate token CSRF yang nantinya akan divalidasi saat submit form untuk diproses, kurang lebih akan seperti ini<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2943\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture10.png\" alt=\"\" width=\"624\" height=\"413\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2944\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture11.png\" alt=\"\" width=\"624\" height=\"492\" \/><\/p>\n<p><span style=\"font-weight: 400\">Pada saat form change profile di submit akan ada pengecekan apakah token csrf yang dikirim itu sama dengan yang ada pada session saat itu juga, jika sama permintaan ganti username akan diproses, lalu apakah itu sudah cukup? Bagaimana terdapat kasus seseorang login dan tidak melakukan apapun (idle), bisa saja token csrf yang digenerate itu diambil dan disalahgunakan, maka dari itu ada baiknya kita memakai expire time pada token csrf.<\/span><\/p>\n<p><span style=\"font-weight: 400\"> <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2945\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture12.png\" alt=\"\" width=\"624\" height=\"419\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400\">akan dilakukan generate to expire time pada csrf token yang berlaku untuk satu jam kedepan. Lalu pada saat dikirimkan akan diproses apakah token yang di generate tadi sudah expired atau belum.<\/span><\/p>\n<p><strong>\u00a0 \u00a0 3. XSS Attack<\/strong><\/p>\n<p><span style=\"font-weight: 400\">Untuk mengetahui apakah suatu aplikasi memiliki kerentanan pada XSS, kiita masih memakai halaman change profile untuk XSS attack dan menggunakan payload<\/span><\/p>\n<p><span style=\"font-weight: 400\">&lt;script&gt;alert(&#8220;test&#8221;)&lt;\/script&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400\">&lt;script&gt;alert(document.cookie)&lt;\/script&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400\"> <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2946\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture13.png\" alt=\"\" width=\"623\" height=\"311\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Jika berhasil akan memunculkan pop up yang berisi tentang cookie yang saat ini sedang aktif<\/span><\/p>\n<p><span style=\"font-weight: 400\"> <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2947\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture14.png\" alt=\"\" width=\"624\" height=\"279\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Bayangkan jika suatu website memakai cookie sebagai alat untuk authentication, bisa saja orang yang tidak berhak, login dengan cookie yang ia dapat. Untuk mencegah hal ini. Bisa menggunakan sanitation terhadap inputan user, kurang lebih code nya akan seperti ini<\/span><\/p>\n<p><span style=\"font-weight: 400\"> <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2948\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture15.png\" alt=\"\" width=\"624\" height=\"491\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Kita akan memakai function bawaan dari php yaitu HTML entities untuk mengganti character khusus menjadi code html yang kalau diinterpretasikan akan sama dengan character yang kita inginkan, sebagai contoh jika kita menginputkan \u2018&lt;script&gt;alert(&#8220;t&#8221;)&lt;\/script&gt;\u2019 <\/span><span style=\"font-weight: 400\">Akan menjadi seperti ini<\/span><\/p>\n<p><span style=\"font-weight: 400\"> <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2949\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture16.png\" alt=\"\" width=\"624\" height=\"67\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400\"> <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2950\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2024\/05\/Picture17.png\" alt=\"\" width=\"624\" height=\"220\" \/><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Dengan menggunakan htmlentities, payload tersebut akan disimpan sebagai character code html tersendiri.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Reference :<\/span><\/p>\n<p><span style=\"font-weight: 400\">SQL injection<\/span><\/p>\n<p><a href=\"https:\/\/www.aquasec.com\/cloud-native-academy\/application-security\/php-security\/#:~:text=Because%20of%20PHP's%20popularity%2C%20it,site%20request%20forgery%20(CSRF)\"><span style=\"font-weight: 400\">https:\/\/www.aquasec.com\/cloud-native-academy\/application-security\/php-security\/#:~:text=Because%20of%20PHP&#8217;s%20popularity%2C%20it,site%20request%20forgery%20(CSRF)<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><a href=\"https:\/\/medium.com\/@alrazak\/php-6506742d443b\"><span style=\"font-weight: 400\">https:\/\/medium.com\/@alrazak\/php-6506742d443b<\/span><\/a><\/p>\n<p><a href=\"https:\/\/medium.com\/@london.lingo.01\/10-reasons-why-php-is-still-relevant-in-2023-d533ed6dc687\"><span style=\"font-weight: 400\">https:\/\/medium.com\/@london.lingo.01\/10-reasons-why-php-is-still-relevant-in-2023-d533ed6dc687<\/span><\/a><\/p>\n<p><a href=\"https:\/\/medium.com\/swlh\/basics-of-php-b6cab90787cf\"><span style=\"font-weight: 400\">https:\/\/medium.com\/swlh\/basics-of-php-b6cab90787cf<\/span><\/a><\/p>\n<p><a href=\"https:\/\/www.kodingakademi.id\/bahasa-pemrograman-php-apakah-masih-menarik-di-2023-ini\/#:~:text=Statistik%20tahun%202022%20menunjukkan%20bahwa,situs%20web%20masih%20menggunakan%20PHP\"><span style=\"font-weight: 400\">https:\/\/www.kodingakademi.id\/bahasa-pemrograman-php-apakah-masih-menarik-di-2023-ini\/#:~:text=Statistik%20tahun%202022%20menunjukkan%20bahwa,situs%20web%20masih%20menggunakan%20PHP<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><a href=\"https:\/\/security.stackexchange.com\/questions\/643\/why-do-people-say-that-php-is-inherently-insecure\"><span style=\"font-weight: 400\">https:\/\/security.stackexchange.com\/questions\/643\/why-do-people-say-that-php-is-inherently-insecure<\/span><\/a><\/p>\n<p><a href=\"https:\/\/www.linkedin.com\/pulse\/why-php-considered-insecure-yassine-mabrouk\"><span style=\"font-weight: 400\">https:\/\/www.linkedin.com\/pulse\/why-php-considered-insecure-yassine-mabrouk<\/span><\/a><\/p>\n<p><a href=\"https:\/\/w3techs.com\/technologies\/overview\/programming_language\"><span style=\"font-weight: 400\">https:\/\/w3techs.com\/technologies\/overview\/programming_language<\/span><\/a><\/p>\n<p><span style=\"font-weight: 400\">CSRF attack<\/span><\/p>\n<p><a href=\"https:\/\/owasp.org\/www-community\/attacks\/csrf\"><span style=\"font-weight: 400\">https:\/\/owasp.org\/www-community\/attacks\/csrf<\/span><\/a><\/p>\n<p><a href=\"https:\/\/www.synopsys.com\/glossary\/what-is-csrf.html#:~:text=Definition,has%20in%20an%20authenticated%20user\"><span style=\"font-weight: 400\">https:\/\/www.synopsys.com\/glossary\/what-is-csrf.html#:~:text=Definition,has%20in%20an%20authenticated%20user<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP (Hypertext Preprocessor) adalah sebuah bahasa pemrograman scripting yang berjalan pada server atau biasa dikenal dengan server side rendering. Seperti pada bahasa pemrograman lainnya, PHP memiliki syntax penulisannya sendiri serta fitur-fitur tertentu seperti data processing, form validation, upload file, session management, send email, dan komunikasi dengan MySQL, PostgreSQL, MongoDB, SQlite, lalu support untuk banyak protocol [&hellip;]<\/p>\n","protected":false},"author":42,"featured_media":3085,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,4],"tags":[],"class_list":["post-2933","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles","category-featured"],"_links":{"self":[{"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/posts\/2933","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/comments?post=2933"}],"version-history":[{"count":5,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/posts\/2933\/revisions"}],"predecessor-version":[{"id":3100,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/posts\/2933\/revisions\/3100"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/media\/3085"}],"wp:attachment":[{"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/media?parent=2933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/categories?post=2933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/tags?post=2933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}