Laravel 4 Security

จากเมื่อก่อนที่เคยเขียน Laravel Security ซึ่งในตอนนั้นผมยังใช้ Laravel 3 อยู่ แต่ทุกวันนี้ต้องบอกเลยว่า Laravel 4 นั้นเยี่ยมมากๆ และยังไม่รวมถึง Laravel 4.1 ที่ดีขึ้นไปอีก แต่ขั้นตอนการ update ออกจะสะท้านหน่อยในโปรเจ็คขนาดใหญ่

วันนี้ผมจะเขียนอิงหัวข้อเดิม จะได้เป็นข้อเปรียบเทียบกับ Laravel 3 ได้เพื่อใครที่กำลังตัดสินใจว่าจะใช้ดีหรือไม่ โดยผมจะเขียนอิง Laravel 4 ซึ่งในด้านความปลอดภัยนั้นไม่ได้แตกต่างกับ 4.1 สักเท่าไร

1. CSRF protection หรือการปลอมแปลง http request ที่เรียกข้ามเว็บไซต์ เรื่องนี้ Laravel มีป้องกันอยู่แล้ว โดยเป็นการสร้าง Token ไว้ตรวจสอบ หาอ่านได้ที่ CSRF protection แต่สำหรับคนที่เขียน Route แบบ Controller สามารถเขียน filter ไว้ที่ Controller แบบนี้ได้ (ไม่มีใน doc)

$this->beforeFilter('csrf');

2. Cookie Security เรื่องนี้ไม่ต่างจาก Laravel 3 มากครับ หาอ่านได้ที่ Cookies ซึ่งจริงๆ ต้องบอกรวมๆ ว่าข้อมูลต่างๆ ของ Laravel 4 ทั้ง Cookie Session จะถูกเข้ารหัสทั้งหมด ทำให้ข้อมูลนั้นปลอดภัยครับ แต่ถ้าเรื่องทางเทคนิคเชิงลึก แนะนำให้แกะโค้ดดูครับ

3. SQL-Injection เรื่องนี้ไม่ต้องท้าวความเลย มีป้องกันไว้เหมือนกัน โดย Laravel จะทำงานผ่าน PDO หาอ่านได้ที่ PDO/Prepared statements and stored procedures สรุปให้สั้นๆ คือ ถ้าเรียกทำงานผ่าน Fluent หรือ Eloquent มันก็จะจัดการให้เสร็จ ซึ่งใน Laravel 4 ยังสามารถเขียน query ดิบได้อยู่ แต่มันเป็นสิ่งที่ไม่แนะนำให้ทำครับ เราจึงไม่เห็นหัวข้อของเรื่อง raw query ถูกพูดใน doc ซักเท่าไร (ถูกให้ความสำคัญลดลง)

4. XSS หรือการแทรกโค้ดไม่พึ่งประสงค์ลงหน้าเว็บ เรื่องนี้ Laravel ไม่มีการป้องกันครับ เหมือนเดิมครับ เพราะ PHP ก็มีฟังค์ชั่นพื้นฐานมาเพื่อป้องกันเรื่องพวกนี้แล้วอย่าง strip_tags() and htmlentities() ดังนั้นเรื่องนี้ต้องจัดการกันเองครับ ด้วยการเขียน Validation ให้ครบครับ

เขียนคราวนี้เหมือนเอาบทความเก่ามาแก้ครับ เพราะช่วงนี้งานชุกครับ  /XD

Fatal error: Exception thrown without a stack frame in Unknown on line 0

วันนี้ผมสั่ง composer update บนเครื่อง production ได้ผมได้เจอกับ error ตัวนี้ เคยแต่เห็นคนอื่นเจอ วันนี้ผมได้เจอกับตัวเอง

Fatal error: Exception thrown without a stack frame in Unknown on line 0

สำหรับโปรแกรมเมอร์ไม่ว่าจะเขียนภาษาไหนก็เถอะ แต่ถ้าเจอ error และพออ่านอังกฤษออกก็คงต้องอุทานว่า มันอะไรเนี่ย? ซึ่งจริงๆ วิธีแก้ก็ไม่ยาก (กว่าผมจะงมหาสาเหตุเจอก็โอยาวล่ะ)

อ่านเพิ่มเติม

Make laravel be website multi-languagle with old request.

I will say at first. This post is about hacking laravel but It don’t about modifiy illuminate core. For who want to use laravel. First rule that you must remember.

“If you want to extend, modify or hack laravel, Don’t modify any files in /vendor. You should do it in /app only.”

Back to main topic of this post. My project that I do at work. I receive request about how to modify Request class change url back to url that don’t have language in url.

Such as ethaizone.com/th/page/to/me (th is Thai) change back to ethaizone.com/page/to/me.

My english is weak and I think it’s such a pain that descript why changing Request class is solution. What is benefit. I think people who search this page from Google should know it. All I can say is It helps project can develope faster with old environment.

View code and thinking. http://paste.laravel.com/FmG

In paste, I post URL class extended version for make url languagable too. We make one system that handle multi-site with multi-language and have multi-admin system.

ปล. สำหรับคนไทย ตอนแรกผมจะพิมพ์ไทยอยู่นะ แต่ปรากฎว่าใช้แรงงานกับภาษาอังกฤษไปเยอะแล้ว ดังนั้นไปเปิดดิกเอาเองครับ