SQL Injection

การป้องกัน SQL Injection และ XSS ใน Laravel

Laravel เป็นหนึ่งใน PHP Framework ที่ได้รับความนิยมสูง เนื่องจากมีความปลอดภัยและโครงสร้างที่ช่วยให้พัฒนาแอปพลิเคชันได้อย่างมีประสิทธิภาพ หนึ่งในจุดแข็งของ Laravel คือความสามารถในการป้องกันช่องโหว่ด้านความปลอดภัย โดยเฉพาะอย่างยิ่ง SQL Injection และ Cross-Site Scripting (XSS) ซึ่งเป็นภัยคุกคามที่พบบ่อยในแอปพลิเคชันเว็บ

บทความนี้จะอธิบายวิธีป้องกันทั้งสองรูปแบบใน Laravel พร้อมตัวอย่างที่เข้าใจง่าย

SQL Injection คืออะไร?

SQL Injection คือการโจมตีโดยการใส่คำสั่ง SQL ที่ไม่พึงประสงค์ลงไปในช่องทางที่ระบบรับข้อมูล เช่น ฟอร์ม หรือ URL จากนั้นทำให้คำสั่ง SQL ทำงานแบบไม่ตั้งใจ ซึ่งอาจนำไปสู่การขโมยข้อมูล แก้ไข หรือลบข้อมูลในฐานข้อมูลได้

ใช้ Eloquent ORM

Laravel มีระบบ ORM (Object-Relational Mapping) ที่ชื่อว่า Eloquent ช่วยให้เขียนคำสั่ง SQL ผ่านรูปแบบ Object ได้อย่างปลอดภัย

				
					// ตัวอย่างที่ปลอดภัย
$user = User::where('email', $request->input('email'))->first();
				
			

ใช้ Query Builder พร้อม Bind Parameters

				
					// ตัวอย่างที่ปลอดภัย
$users = DB::table('users')->where('email', $email)->get();
				
			

ทั้งสองแบบข้างต้นจะมีการ bind ค่าพารามิเตอร์อัตโนมัติ ซึ่งช่วยป้องกัน SQL Injection ได้

หลีกเลี่ยง Raw SQL โดยตรง

				
					// ตัวอย่างที่ไม่ปลอดภัย
$user = DB::select("SELECT * FROM users WHERE email = '$email'");
				
			

หากจำเป็นต้องใช้ raw SQL ควรใช้ bind parameter

				
					// ตัวอย่างที่ปลอดภัยกว่า
$user = DB::select("SELECT * FROM users WHERE email = ?", [$email]);
				
			
XSS

XSS (Cross-Site Scripting) คืออะไร?

XSS คือการโจมตีโดยการฝัง JavaScript ที่เป็นอันตรายลงในเว็บไซต์ ซึ่งมักเกิดจากการแสดงผลข้อมูลของผู้ใช้ที่ไม่ได้กรองหรือ escape ทำให้ผู้ใช้งานที่เข้ามาดูหน้าเว็บถูกโจมตีโดยไม่รู้ตัว เช่น การขโมยคุกกี้ หรือ redirect ไปยังเว็บไซต์อันตราย

การป้องกัน XSS ใน Laravel

ใช้ Blade Template Engine อย่างถูกต้อง

				
					{{-- ตัวอย่างที่ปลอดภัย --}}
{{ $user->name }}

				
			

Laravel จะ escape อักขระ HTML อัตโนมัติ เช่น <, >, ", ', & ให้กลายเป็น HTML Entities

หลีกเลี่ยงการใช้ {!! !!} กับข้อมูลจากผู้ใช้

				
					{{-- ตัวอย่างที่ไม่ปลอดภัย --}}
{!! $user-&gt;comment !!}
				
			
ใช้ {!! !!} เฉพาะเมื่อคุณแน่ใจว่าข้อมูลนั้นปลอดภัย หรือผ่านการทำความสะอาดแล้วเท่านั้น

เสริมความปลอดภัยด้วยการกรองข้อมูล (Sanitize)

หากจำเป็นต้องให้ผู้ใช้กรอกข้อมูล HTML เช่น บทความหรือคอมเมนต์ ควรทำความสะอาด (sanitize) ข้อมูลก่อนบันทึกลงฐานข้อมูล

ติดตั้ง Laravel HTMLPurifier

				
					composer require mewebstudio/purifier
				
			
ตัวอย่างการใช้งาน
				
					use Purifier;

$clean = Purifier::clean($request-&gt;input('content'));
				
			

ป้องกัน XSS ด้วยเทคนิคเพิ่มเติม

1. ใช้ @csrf หรือ csrf_field() ในฟอร์ม

				
					
    @csrf
    <!-- fields -->


				
			

2. ตั้งค่า Content Security Policy (CSP) เพื่อป้องกันการฝังสคริปต์จากภายนอก

3. ระวังการใช้ Flash Messages หรือ Session ที่แสดงข้อความ HTML

สรุป Laravel ช่วยคุณป้องกันอะไรได้บ้าง?

ช่องโหว่ วิธีป้องกันใน Laravel SQL Injection ใช้ Eloquent หรือ Query Builder, bind parameters XSS ใช้ {{ }} escape output อัตโนมัติ Unsafe HTML ใช้ HTMLPurifier ทำความสะอาดก่อนแสดงผล CSRF ใช้ @csrf ในฟอร์มทุกครั้ง

เคล็ดลับเพิ่มเติม

  • อย่าคิดว่า Laravel ปลอดภัย 100% ควรเขียนโค้ดอย่างรอบคอบ และคำนึงถึงผู้ใช้เสมอ
  • ตรวจสอบและทดสอบช่องโหว่ด้วยเครื่องมือเช่น OWASP ZAP, Burp Suite เป็นต้น

หากคุณกำลังพัฒนาเว็บด้วย Laravel การเข้าใจวิธีป้องกัน SQL Injection และ XSS จะช่วยให้แอปพลิเคชันของคุณปลอดภัย และน่าเชื่อถือมากขึ้นครับ อีกทั้งหากคุณใช้งาน WordPress สามารถอัปเดตการป้องกันโดนแฮ็กกันเลยที่นี่ 10 วิธีป้องกันเว็บไซต์ WordPress จากการโดนแฮ็ก อัปเดตปี 2025

สอบรายละเอียดเพิ่มเติม

Facebook
Twitter
Email

Related Posts

หมวดหมู่ที่น่าสนใจ