XSS Prevention

setelah sedikit membahas XSS di sini, ya meskipun agak ngawur saatnya kita bahas cara mencegah bug ini ada pada web kita

XSS bisa berjalan / dijalankan karena tag <script> yang lepas dan berjalan / terender oleh browser maka dari itu kita manipulasi browser agar tidak menjalankan tag html yang di input kan user, eitsss kita ga akan bongkar-bongkar browser kok, cuman sedikit permainan sebelum input user di munculkan pada website

example:

<?php
echo $_GET['q'];
?>

input : <script>alert("XSS")</script>
output: <script>alert("XSS")</script> //pop up XSS akan muncul
untuk preventionnya kita bisa pake beberapa fungsi php yang sudah ada


<?php
echo strip_tags($_GET['q']);
?>

input : <script>alert("XSS")</script>
output: alert("XSS") //tag html akan dihilangkan
namun kode diatas masih kurang untuk mengatasi xss ini, mengapa ?


<?php
echo '<input type="text" value="'.strip_tags($_GET['q']).'">';
?>

input : " onmouseover="alert('XSS')
output: <input type="text" value="" onmouseover="alert('XSS')">
dengan input diatas maka ketika mouse menghover ke input text pop up XSS akan muncul
lalu bagaimana agar tidak terkena macam-macam bypass seperti ini ?


<?php
echo '<input type="text" value="'.htmlentities(strip_tags($_GET['q'])).'">';
?>

input : " onmouseover="alert('XSS')
output: <input type="text" value="&quot; onmouseover=&quot;alert(1)"> //tanda petik berubah menjadi &quot;

well menurut saya dengan menggunakan kedua fungsi tersebut sudah cukup untuk mencegah terjadinya XSS pada website, namun jika pada kolom pencarian memang memerlukan tanda < dan > kita bisa menggunakan preg_replace() untuk menghapus semua kata yang mengandung unsur XSS, seperti script, javascript, onerror, onmouseover, onload dsb

bagaimana menurutmu ? apakah kamu memiliki cara lain untuk menghindari XSS ini ? silahkan share di kolom komentar