• September 10, 2018

    $_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 ดีๆมาดู



เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories


Uncategorized