Flappy2048 Helper

 

For who want as greasemonkey version. Click!

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 และพออ่านอังกฤษออกก็คงต้องอุทานว่า มันอะไรเนี่ย? ซึ่งจริงๆ วิธีแก้ก็ไม่ยาก (กว่าผมจะงมหาสาเหตุเจอก็โอยาวล่ะ)

วิธ๊แก้คือลง xdebug แล้วรับ environment ให้เป็น production แล้วเปิดดูใหม่ครับ รับรองว่า error จะงอกงามมาให้ดู กรณีของผมเจอ

Fatal error: Uncaught exception ‘ReflectionException’ with message ‘Class InvalidUserException does not exist’ in D:\xxxxxxx\vendor\laravel\framework\src\Illuminate\Exception\Handler.php on line 305
( ! ) ReflectionException: Class InvalidUserException does not exist in D:\xxxxxxx\vendor\laravel\framework\src\Illuminate\Exception\Handler.php on line 305

ซึ่งถ้าใครเห็น error ตัวใหม่นี้จะร้องอ้อเลย นั่นก็คือมันเกิด error ภายในตัว exception handler นั้่นเองครับ เมื่อไม่มี handler ที่ใช้งานได้ให้ทำงาน มันจึงเกิด error นรกแบบข้างบนนั้นเองครับ

=======================================

Today, I run “composer update” in project that I wrote with Laravel on production server and found this error.

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

It’s suck as you see it. I don’t know where file or line number that cause this error. After I spend hour for it and I found solution. First I set project on local to work as production by set environment detector to look my computer as production. Second I installed xdebug on my apache and I saw it.

Fatal error: Uncaught exception ‘ReflectionException’ with message ‘Class InvalidUserException does not exist’ in D:\xxxxxxx\vendor\laravel\framework\src\Illuminate\Exception\Handler.php on line 305
( ! ) ReflectionException: Class InvalidUserException does not exist in D:\xxxxxxx\vendor\laravel\framework\src\Illuminate\Exception\Handler.php on line 305

If you see these lines, you shound figure out that error is from exception handler itself so error can’t show it and cause error at line 0.

I hope this post can help some people too.