$_GET รับค่า URL (ไม่เกิน 100 character)
$_POST รับค่า Form (ดึงข้อมูลจากการส่งมาจากฟอร์ม และสามารถ attach พวกpacketsต่าง ๆมาได้ด้วย)
$_REQUEST รับค่าได้ทั้งสองแบบ
session ในการใช้งานปกติจะหมายถึง cookie + การเก็บข้อมูลในฝั่ง server ครับ
(ปกติจะไม่ใช้ session แบบแนบ session id ไปกับ url กันแล้ว)
ซึ่งยังไงๆ การใช้ session ก็ปลอดภัยกว่า cookie อย่างเดียวแน่นอนครับ
เพราะ cookie จะเก็บฝั่ง client ผู้ใช้งานสามารถเปลี่ยนข้อมูลใน cookie ได้เองเลย
การป้องกัน XSS (ป้องกันไม่ให้มีแทรกข้อมูลเพื่อ run javascipt หรือ script อื่นๆ ในหน้าแสดงผล)
http://cakephp.jitwitya.com/post/xss-prevention
การป้องกัน Cross-site request forgery (ให้ยกเลิกการใช้ข้อมูล $_GET หรือ $_REQUEST ในหน้าที่มีการแก้ไขข้อมูล)
http://cakephp.jitwitya.com/post/dynamic-image-risk
การป้องกันข้อมูลใน session
http://cakephp.jitwitya.com/post/prevent-session-hijacking
การป้องกัน sql injection ใน php (อันนี้เป็นการใช้ mysql_query กับ mysql_real_escape_string มาประยุกต์ คำสั่งนี้สามารถใช้ function prepare statement เพื่อป้องกันแทนได้)
http://cakephp.jitwitya.com/post/prevent-sql-injection-for-php
อันนี้เกี่ยวกับตัว function ครับถ้าใช้ in_array ในการตรวจสอบข้อมูลควรทำเป็น strict type ไว้ก่อนครับ
หรือไม่ก็แปลงข้อมูลเป็นชนิดเดียวกันก่อนตรวจสอบครับ เพื่อที่เวลา type ของตัวแปรที่มาตรวจสอบไม่ตรงกันจะได้ไม่เกิดช่องโหว่ที่สามารถ hack ได้
http://cakephp.jitwitya.com/post/in_array-problem
– การป้องกันรูปแบบข้อมูลที่ถูกต้อง ที่สามารถกันการ hack ได้จะต้องกันที่ฝั่ง server
เนื่องจากผู้ใช้สามารถ diable javascript แล้วก็สามารถแทรกข้อมูลอะไรมาก็ได้ครับ
– เรื่องเกี่ยวกับ security ที่สำคัญๆ
http://articles.sitepoint.com/article/php-security-blunders/1
http://www.owasp.org/index.php/PHP_Security_Leading_Practice
http://cakephp.jitwitya.com/post/increase-security-to-apache
– สิ่งที่ไม่ควรทำในการเขียน php
http://www.samuelfolkes.com/2009/08/17-php-practices-that-should-be-banished-forever/
การทำให้มีความปลอดภัยยากพอๆ กับทำ application 10 ตัวที่ไม่ได้ใส่ในเรื่อง security ครับ
หา framework ดีๆ สักตัวมาใช้จะลดปัญหาได้บ้างครับ
mysql_real_escape_string ป้องกัน sql injection
csrf คือ cross site request forgery หรือการเรียกข้ามเว็บไซท์แบบปลอมๆ เช่น ผมทำฟอร์มซ่อนฟอร์มหนึ่งในเว็บที่จะให้เหยื่อหลงเข้าไป และเหยื่อที่ไม่ได้ log out จากหน้า member เว็บหนึ่งหลงเข้าไป ก็กลายเป็นการไปโพสท์ข้อความในเว็บไซท์ที่เหยื่อเป็น member กับเว็บนั้น
xss คือ cross site scripting อย่างเช่นมีเว็บหนึ่งทำโดยผู้ไม่มีประสบการณ์และไม่แคร์เรื่องความปลอดภัย
เขารับค่า $_GET[‘orders’] มา แล้วแสดง echo บนหน้าเว็บเลย พอผมเรียกเข้าไปว่า page.php?orders=alert(‘test’);
ก็จะกลายเป็นหน้านั้นเขียน javascript alert ขึ้นมา ซึ่งมันทำในเรื่องร้ายแรงกว่านี้ได้เยอะ อันตรายมากครับ
วิธีนี้การกรอง $_GET $_POST ด้วย strip_tags หรือ htmlentities แค่นี้ไม่พอครับ มันต้องมีการกวาดหาพวกคำสั่ง javascript/inline style sheet ด้วย
เพราะพวกนี้บางทีจะไม่แทรกเข้ามาเป็นตัวอักษรธรรมดา แต่จะแทรกเข้ามาเป็นเหมือนกับตัวอักษร hex อะไรแบบนี้
ถ้าจะกัน csrf/xss ลองสคริปที่ผมทำแจกไว้ดูมั้ยครับ http://www.okvee.net/articles/secured-form-and-prevent-csrf-xss
มันกรองได้ไม่ perfect เหมือนที่พวก php framework เค้าทำกัน แต่ว่าก็ใช้ได้ดีในระดับหนึ่งนะ
ตัวแปร ที่รับมาจาก การ request
จำพวก $_POST $_GET $_COOKIE
ก่อนที่จะเอาไปเชื่อมกับ database ให้แปลงให้อยู่ในรูปที่ใช้ได้
ตัวอย่าง
$sql = 'select * from table where id='.intval($_GET['id']); $upd = 'update table set name='.($_POST['nm']>''? '0x'.bin2hex($_POST['nm']) : " '' "). ' where id='.intval($_GET['id']);
อันนี้เก่าแล้วแต่ ครบ
http://www.thaicreate.com/community/basic-mysqli-reference.html
ไม่ต้องไปเขียนเองเเล้ว
1.ใช้ Frame work
+https://stackoverflow.com/questions/51742601/how-to-insert-data-to-db-in-framework-7
2. เอา source code ดีๆมาดู