Facebook Article  บทความ Facebook   C++ Article  บทความ C , C++   Android Article  บทความ Android   PHP SQL Article  บทความ PHP   Games Article  บทความ Games  

filezilla Article  บทความ Filezilla 

Youtube icon  Video 

เขียน PHP ให้ปลอดภัยและป้องกันการถูกโจมตีจากเหล่าร้าย

Posted by Pongpat Janthai on กันยายน 18, 2016 – 8:14 am

เขียน PHP ให้ปลอดภัยและป้องกันการถูกโจมตีจากเหล่าร้าย

แปะๆกันลืม สำหรับท่านทั้งหลายที่กำลังจะเป็นนักพัฒนาเว็บแอพพลิเคชัน จะต้องคำนึงถึงความปลอดภัยเป็นสำคัญ เราจะเขียน PHP ยังไงให้ปลอดภัย และลดช่องโหว่ที่จะถูกโจมตีจากผู้ไม่หวังดีหรือที่เรารู้จักกันคือเหล่า Hacker นั่นเอง

ตรวจสอบอะไรบ้างก่อนจะเริ่ม PHP
1) / Cross Site Scripting (XSS)
2) / Injections
    / SQL Injection
    / Directory Traversal (Path Injection)
    / Command Injection
    / Code Injection
3) / Cross Site Request Forgery (XSRF/CSRF)
4) / Public Files
5) / Passwords
6) / Uploading Files
7) / Session Hijacking
8) / Remote File Inclusion
9) / PHP Configuration
    / Error Reporting
    / Exposing PHP Version
    / Remote Files
    / open_basedir
    / Session Settings
10) / Use HTTPS
11) / Things Not Listed

Cross Site Scripting (XSS)
การโจมตีแบบ XSS เกิดขึ้นเมื่อฝั่งของผู้ใช้งานรันโค้ดที่ Hacker สามารถส่งโค้ดไปรันโดยอาศัยช่องโหว่จากเว็บเรา มักจะใช้ Javascript ในการโจมตีเหยื่อ โดยการส่งโค้ดเข้าไปผ่าน Output ของ PHP script อีกที ไปดูตัวอย่างการโจมตีแบบ Cross Site Scripting กันครับ

Cross Site Scripting

Cross Site Scripting


ใช้ ENT_QUOTES ในการดัก single และ double quotes ที่มักจะส่งมาพร้อมกับแท็ก HTML
UTF-8 ใช้ได้กับ PHP 5.4 เป็นต้นมา ซึ่งปัจจุบันถูกตั้งค่าให้เป็นค่าเริ่มต้นแล้วจ้า ในบางบราวเซอร์บางอักขระจะต้องใช้ htmlspecialchars().

Injections
SQL Injection
เมื่อเราทำการเขียนสคริปต์เพื่อติดต่อฐานข้อมูล SQL Injections คือการอาศัยช่องโหว่ส่ง SQL statement เพื่อเข้าถึงฐานข้อมูลของเรา
อ่านเพิ่มเติม “What is SQL injection and how to prevent it?

$page = $_GET['page'] ?? 'home';

require $page;
// or something like this
echo file_get_contents('../pages/'.$page.'.php');
// Checking if the string contains parent directory
if (strstr($_GET['page'], '../') !== false) {
    throw new \Exception("Directory traversal attempt!");
}

// Checking remote file inclusions
if (strstr($_GET['page'], 'file://') !== false) {
    throw new \Exception("Remote file inclusion attempt!");
}

// Using whitelists of pages that are allowed to be included in the first place
$allowed = ['home', 'blog', 'gallery', 'catalog'];
$page = (in_array($page, $allowed)) ? $page : 'home';
echo file_get_contents('../pages/'.$page.'.php');

Command Injection
โปรดใช้ความระมัดระวังเมื่อจัดการกับคำสั่งการดำเนินงานฟังก์ชั่นและข้อมูลที่คุณไม่ไว้วางใจ

exec('rm -rf '.$GET['path']);

Code Injection
Code injection จะเกิดขึ้นได้กรณีที่แฮกเกอร์สามารถส่งคำสั่งเข้ามาในฟังก์ชัน eval() ครับท่านผู้ชม

eval('include '.$_GET['path']);

อ่านเพิ่มเติมสำหรับเช็คลิสต์อื่นๆ ได้ที่
https://wwphp-fb.github.io/faq/security/php-security-issues/

บทความที่เกี่ยวข้อง
เทคนิคเพิ่มเติม SQL
sql รวมหลายๆตารางเข้าด้วยกัน
PHP ติดต่อฐานข้อมูล


แสดงความคิดเห็น (กรุณาใส่ ชื่อ,อีเมล ให้ถูกต้อง)

*

*



เรื่องอื่นๆที่น่าสนใจ


ชีวิตจริงของนักศึกษา วิศวะฯ ขายปลาหมึก

Facebook Messenger สำหรับคนแชท Facebook โดยเฉพาะ
ยกเลิกTimeline
ยกเลิก Timeline ภาคสอง คราวนี้ออกจริงๆ!!!

About

Pongpat Janthaiพงษ์พัฒน์ จันทร์ไทย
COE#18 วิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยขอนแก่น
"มุมเล็กๆ ของเด็กวิศวะฯ"

Tabs Switcher

คลังเก็บ

Archives

Meta