PHP 5.4 กำลังจะหมด Security support และ End of Life ในเดือนกันยายน 2015 นี้

เมื่อปีก่อน PHP 5.3 นั้นก็หมดช่วง Security support  และ End of Life ไปตั้งแต่เดือนสิงหาคม 2014 แล้ว โดย version สุดท้ายคือ 5.3.29

มาปีนี้ PHP 5.4 ก็ตามมาติดๆ โดยจะหมด Security support และ End of Life ในเดือนกันยายน 2015 ที่จะถึงนี้เช่นกัน โดยใครที่จะอัพเกรดไป version ใหม่ในตอนนี้จากทั้ง PHP 5.3 หรือ PHP 5.4 ขอแนะนำให้อัพเกรดไปใช้ PHP 5.6 ไปเลย เพราะ PHP 5.5 จะหมดช่วง Security support  และ End of Life ในปีหน้านี้แล้วเช่นกัน ฉะนั้น อัพแล้วได้ support ยาวๆ ซึ่ง PHP 5.6 ยังคง support ไปอย่างน้อยๆ ก็ 2 ปี (End of Life ในสิงหาคมปี 2017)

ข้อมูลอื่นๆ

  • PHP 5.2 นั้น End of Life ไปตั้งแต่เดือนมกราคม 2011 (version สุดท้ายคือ 5.2.17)
  • PHP 5.3 นั้น End of Life ไปตั้งแต่เดือนสิงหาคม 2014 (version สุดท้ายคือ 5.3.29)
  • PHP 5.4 ในตอนนี้อยู่ในช่วง Security support เท่านั้น จะหมด support ในเดือนกันยายน 2015 นี้แล้ว (version ล่าสุด ณ วันที่โพสนี้คือ 5.4.40)
  • PHP 5.5 ยังอยู่ในช่วง Active support แต่จะหมดช่วง Active support ในเดือนมิถุนายน 2015 นี้ แล้วจะเข้าสู่ช่วง Security support เท่านั้น และจะหมด support ในเดือนมิถุนายน 2016 หรือปีหน้า (version ล่าสุด ณ วันที่โพสนี้คือ 5.5.24)
  • PHP 5.6 ตัวล่าสุด อยู่ในช่วง Active support แต่จะหมดช่วง Active support ในเดือนสิงหาคม 2016 (ปีหน้า) แล้วจะเข้าสู่ช่วง Security support เท่านั้น และจะหมด support ในเดือนสิงหาคมม 2017 หรือ 2 ปีข้างหน้า (version ล่าสุด ณ วันที่โพสนี้คือ 5.6.8)
  • PHP 7.0 จะออก RC version ในเดือนหน้า (มิถุนายน 2015) และ GA/Release ในเดือนตุลาคม 2015 นี้ โดยอ้างอิงจากแผนใน php.net

อ้างอิง

ส่วนใครยังอยากใช้ตัวที่ End of Life ไปแล้ว หรือเปิด options ใน php.ini ที่มีผลต่อความปลอดภัยของระบบ เอาตามที่สบายใจครับ

คำแนะนำในการเก็บรหัสผ่านในระบบสำหรับนักพัฒนาซอฟต์แวร์ และผู้ดูแลระบบไอที

คำแนะนำนี้เหมาะสำหรับนักพัฒนาซอฟต์แวร์ และผู้ดูแลระบบไอทีเป็นสำคัญ สำหรับบุคคลทั่วไปแนะนำให้อ่าน ตั้งรหัสผ่านอย่างไรให้ปลอดภัย แทนนะครับ

จริงๆ เจอเคสในการเก็บรหัสผ่านเป็นแบบ plaintext หรือเก็บรหัสผ่านแล้วสามารถย้อนกลับเป็น plaintext เดิมๆ ได้โดยง่าย ซึ่งผมเจอเคสแบบนี้บ่อยค่อนข้างมาก และคิดว่าควรจะเขียนเรื่องนี้สักครั้งหนึ่ง

หลักของการเก็บรหัสผ่านในฐานข้อมูลนั้น

1. ไม่ใช่การเก็บตัวรหัสผ่านจริงๆ ลงไป

2. ไม่ควรใช้การจัดเก็บรหัสผ่านที่สามารถย้อนกลับมาเป็นรหัสผ่านต้นทางได้ ไม่ว่าจะทางใดก็ทางหนึ่ง

หลักง่ายๆ ก่อน 2 ข้อนี้ ทำให้เกิดวิธีคิดในการเก็บรหัสผ่านเพียงแค่ hash (หรือบางเอกสารเรียก fingerprint หรือค่า message digest) ของรหัสผ่านนั้นๆ กล่าวคือ การกระทำใดๆ ในตัวระบบ ต้องไม่มีความสามารถที่สามารถย้อนกลับวิธีการได้มาซึ่งข้อมูล hash ได้ (Non-invertibleเพื่อเป็นการป้องกันรหัสผ่านที่แท้จริงจากการนำไปใช้งานได้ทันทีหลังจากระบบถูก hack แล้วถูก dump ข้อมูลเหล่านี้ออกไป เพราะแม้ว่ารหัสผ่านที่ถูกนำออกไปจะเป็นเพียงแค่ hash ของข้อมูล แต่การโจมตีแบบ rainbow table attacks ก็สามารถถอดรหัสผ่านใดๆ ที่เป็นเพียงแค่ค่า hash ย้อนกลับมาเป็นรหัสผ่านเดิมได้ไม่ช้าก็เร็ว เพราะแม้มีความเป็นไปได้น้อยมากๆ แต่ก็ถือว่ามีความเสี่ยง

หลักการขอ rainbow table attacks คล้ายๆ การ brute force รหัสผ่านโดยทั่วไป แต่เป็นการกระทำต่อ hash เป็นหลัก โดยสุ่มชุดข้อมูลที่คิดว่าเป็นรหัสผ่าน มาเข้าขั้นตอน hash ที่เป็นที่นิยมใช้ให้ได้ซึ่งค่า hash แล้วเอาชุดข้อมูลดังกล่าว ใส่ลงในฐานข้อมูล rainbow tableไว้ แล้วเมื่อมีการ hack ระบบเกิดขึ้นแล้วได้ชุดข้อมูล hash ที่ dump ออกมา ก็เอาไปทดสอบเทียบกับชุดข้อมูลในฐานข้อมูลที่สร้างไว้ก่อนหน้านี้ ก็จะย้อนกลับมาได้ว่า ข้อมูล plaintext ที่เป็นส่วนย้อนกลับของ hash มีค่าใด

หากแต่การปรับปรุงและใช้ขั้นตอนของการใดมาซึ่งค่า hash ที่ยาวขึ้น มีความซับซ้อนมากขึ้น ไม่ใช้ขั้นตอนตามมาตรฐานเพียงอย่างเดียว มีการผสมชุดข้อมูลอื่นๆ ที่สร้างขึ้นจากระบบด้วยแล้วการถูก rainbow table attacks ก็มีความเสี่ยงน้อยลงไปอีก

โดยด้านล่างเป็นลักษณะของฟังค์ชั่นโดยทั่วไปที่มักใช้กัน

[hash] = [salt] + [hash_function([salt] + [password])]

[salt] = เป็นการสุ่มจากวิธีการสุ่มใดๆ ที่ปลอดภัยที่สุดเท่าที่ทำได้ คำแนะนำคือควรใช้วิธีการสุ่มจากฟังค์ชั่นแบบ Cryptographically Secure Pseudo-Random Number Generator (CSPRNG)

[hash_function] ก็เลือกว่าจะเอาตัวไหนก็ได้ แต่ที่ใช้ๆ กันก็ แต่พวก MD5 หรือ SHA-1 ที่มันหาง่าย แต่มันก็แข็งแรงน้อยลงมากๆ ไม่แนะนำ และเดี่ยวนี้มันพูดกันที่ระดับ SHA-2 กันไปแล้ว (SHA-2 = SHA-256 หรือ SHA-512)

จริงๆ สูตรฟังค์ชันด้านบนนั้น มีชุดคำสั่งสำเร็จรูปที่นิยมกันที่ชื่อ PBKDF2 เพราะมีการกำหนดชุดการฟังคัชันในการ hash, จำนวนรอบในการสุ่ม และกำหนดความยาวของ hash ได้หลากหลาย ทำให้ยากมากขึ้นในการได้มากซึ่ง plaintext ที่แท้จริงจาก rainbow table

hash= PBKDF2(hash_function_name, password, salt, iterations, length)

ส่วนการใช้งานตอนเปรียบเทียบรหัสผ่านที่ผู้ใช้กรอกเข้ามา กับ hash ที่ระบบเก็บไว้ ก็ตรงไปตรงมา ก็แค่นำรหัสผ่านที่ผู้ใช้กรอกเข้ามาเข้าวิธีการเดิมที่ได้มาซึ่ง hash เดิม แล้วนำมาเปรียบเทียบว่าตรงกันหรือไม่

โดยการทำแบบนี้ “ช่วยให้ผู้ใช้งานทั้งระบบยังพอมีเวลาในการปรับเปลี่ยนรหัสผ่านชุดใหม่ได้ใน ระยะเวลาที่น่าจะปลอดภัยมากที่สุด” เพราะหากว่ากันตามความเป็นจริงแล้ว ในวงการด้านการเข้ารหัสข้อมูลนั้น ทราบกันดีว่า ไม่มีวิธีการใดอะไรที่สามารถเข้ารหัสข้อมูลได้ปลอดภัยที่สุดไปตลอดกาล เพราะเทคโนโลยีด้านการคำนวนของ CPU/GPU นั้นเร็วมากขึ้นทุกวัน การจัดเก็บข้อมูลที่ปลอดภัยในช่วงเวลาหนึ่งอาจไม่ปลอดภัยในอีกไม่กี่ปีต่อมา เพราะเราสามารถแกะ และคำนวนหาค่าต่างๆ หรือสุ่มชุดข้อมูลต่างๆ ได้เร็วและหลายหลากขึ้น ตาม CPU/GPU ที่เร็วขึ้นเพื่อมาสร้าง rainbow table ได้ทุกขณะ

ทั้งหมดที่กล่าวมา เป็นเพียงแค่การทำความเข้าใจเริ่มต้นของแนวคิดในการเก็บรหัสผ่านในระบบเท่านั้น แนะนำให้อ่านข้อมูลเพิ่มเติมจาก keyword ต่างๆ ในบทความนี้เพิ่มเติม เพื่อทำความเข้าใจในทุกขั้นตอนต่อไป

อ้างอิง

Ref: https://www.flickr.com/photos/nyuhuhuu/4443886636

มองยังไงมาตรฐานอาชีพด้านไอซีทีที่กำลังจะเกิดขึ้น

จากข่าว มาตรฐานอาชีพด้านไอซีทีคลอดแล้ว ในช่วง 2-3 วันที่ผ่าน พอเข้าไปดูที่ โครงการจัดทำมาตรฐานอาชีพและคุณวุฒิวิชาชีพ “สาขาวิชาชีพเทคโนโลยีสารสนเทศและการสื่อสารและดิจิตอลคอนเทนต์” ก็พอทราบรายละเอียดว่า มาตรฐานนี้จัดโดยสถาบันคุณวุฒิวิชาชีพ (องค์การมหาชน) แน่นอนว่าเป็นของใหม่ที่ไม่ทราบว่าสถาบันนี้มาได้อย่างไร เลยค้นข้อมูลก็พบรายละเอียดและแนวทางของสถาบันแห่งนี้ หากดูเนื้อหาทั้งหมดแล้วนั้น ในความคิดเห็นส่วนตัวไม่มีปัญหากับการสอบมาตรฐานประกอบวิชาชีพไอทีนะ คือมองว่ามันคือ certificate ตัวหนึ่งในตลาดที่นำไปใช้งานในการแวดวงราชการได้ ซึ่งผมมองว่าคงคล้ายๆ กับมาตรฐานวิชาชีพอื่นๆ เช่น ใบประกอบวิชาชีพวิศวกร ใบประกอบวิชาชีพครู ใบประกอบโรคศิลป์ ใบประกอบวิชาชีพเภสัช ใบประกอบวิชาชีพสถาปนิก ใบประกอบวิชาชีพบัญชี หรืออนุญาตประกอบวิชาชีพทนายความ เป็นต้น

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

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

ฉะนั้นเรื่องการสอบมาตรฐานประกอบวิชาชีพไอที ผมมองว่ามันถูกผลักดันมาหลายรอบแล้ว แต่ก็ไม่สำเร็จ หรือเป็นท่แพร่หลายเสียเท่าไหร่ ก็ไม่รู้โครงการนี้จะเป็นโครงการสุดท้าย หรือว่าจะต้องทำโครงการแนวๆ นี้กันอีกสักกี่รอบเหมือนกัน ><“

เมื่อ Laravel Framework 4 กับ Zend Framework 2 อยู่ร่วมกัน

ตัว Laravel Framework 4 เป็น Framework ที่ดีตัวหนึ่งในตลาด PHP Framework แต่ Zend Framework 2 ก็มี components ที่น่าสนใจช่วยให้เราทำงานได้สะดวกมากขึ้น การเอาทั้งสองตัวมาทำงานร่วมกันจึงเป็นเรื่องที่ดี

ขั้นแรกก็สร้าง project ของ Laravel Framework ด้วยคำสั่งของ composer เสียก่อน (อ้างอิง version 4)

composer create-project laravel/laravel

แก้ไขไฟล์ composer.json ของ Laravel Framework เพื่อเพิ่ม Zend Framework 2 จาก Packagist ลงใน project ของเรา (zendframework/zendframework – Packagist)

โดยเพิ่ม

"zendframework/zendframework": "2.3.*@dev"

ลงในส่วน

require

หน้าตาจะประมาณ

  1. {
  2.     "name": "laravel/laravel",
  3.     "description": "The Laravel Framework.",
  4.     "keywords": ["framework", "laravel"],
  5.     "require": {
  6.         "laravel/framework": "4.0.*",
  7.         "zendframework/zendframework": "2.3.*@dev"
  8. },

เสร็จแล้วก็สั่ง composer update

รอจนจบแล้วเขียน autoload use ทดสอบ component ตัว Zend Version มาแสดงผลดูตามด้านล่าง ซึ่งจะได้ตัวเลข version ของ Zend Framework ประมาณ 2.2.2 (ณ วันที่เขียนบทความ)

สรุปสั้นๆ งาน Microsoft Build 2013 keynote

เริ่มเวลา 9:00 ของวันที่ 26 มิถุนายน 56 ตามเวลาท้องถิ่น หรือ 23:00 ของวันที่ 26 มิถุนายน 56 ตามเวลาประเทศไทย

งาน Build เป็นงานของฝั่ง Microsoft ที่พูดถึงการพัฒนาซอฟต์แวร์ หรือทิศทางการพัฒนาด้าน IT จาก Platform ของ Microsoft โดยจัดที่ San Francisco

ในปีนี้ใน Keynote วันแรกได้พูดถึงหัวข้อหลักๆ ที่เก็บๆ จาก tweet เท่าที่จะสรุปได้คือ

  • Windows 8.1 preview (Windows 8.1 Preview: คำถามที่ถามบ่อย #ภาษาไทย)
  • The Windows 8.1 Preview is here!
  • Windows 8.1 Preview Product Guide for Developers
  • ในเดือนนี้จะมี Apps กว่า 100,000 บน Windows Store และ Apps อย่างเป็นทางการ (Official) จาก Facebook, Flipboard และ NFL Fantasy Football จะมาใน Windows 8 เร็วๆ นี้
  • Mail app ตัวใหม่บน Windows 8
  • Xbox Music หน้าตาใหม่ เพิ่มความสามารถ Radio บน Windows 8.1
  • SkyDrive app ตัวใหม่บน Windows 8.1
  • Picture editor บน Windows 8.1
  • Windows 8.1 สนับสนุน 3D printing มาในตัว
  • 2-in-1 tablet combination ของ Windows 8 เป็นสิ่งที่ตลาดต้องการ
  • Gestures เพียบ! Windows 8.1 คงต้องฝึกพอสมควร แต่ถ้าเป็น สะดวกมากจริงๆ
  • สรุป Start button บน Windows 8.1 คือปุ่มเรียก Start screen ไม่ใช่เรียก Start menu ตามที่หลายๆ คนอยากได้กัน
  • เพิ่ม “Booting into the desktop” เป็นค่าที่ตั้งได้เริ่มต้นโดยไม่ต้องเข้าหน้า Start screen ตลอดทุกครั้งที่บูทเข้าเครื่องใน Windows 8.1
  • ใน Windows 8.1 สามารถเปิด apps ได้หลายๆ monitors และ multitask ได้มาก app ขึ้น
  • เปิดตัว Visual Studio 2013 developer preview และ .NET Framework 4.5.1 developer preview
  • ใน Visual Studio 2013 รองรับ async debugging และเชื่อมต่อกับ Azure mobile service เพื่อพัฒนา app ได้ง่ายมากขึ้น
  • Web GL และ MPEG dash สนับสนุนบน Windows 8.1
  • สามารถใช้ Web GL ใน IE11 และใน Apps ได้
  • Windows 8.1 รองรับ “high-density displays” (full DPI support and scaling)
  • เปิดตัว Bing as a platform โดยชูโรงว่า Facebook Search, Yahoo Search และ Apple Siri ใช้ Bing
  • Windows 8.1 Maps app มาพร้อมกับ 3D Maps
  • Bing จะอยู่ใน Windows, Windows Phone และ Xbox แน่นอนว่านักพัฒนาทั่วไป ที่กำลังพัฒนา app จะใช้งานร่วมได้ด้วย โดยเปิดตัว Bing platform for developers
  • เปิดตัวมือถือ Windows phone 8 รุ่นใหม่ HTC 8XT และ Samsung ATIV S Neo
  • พูดถึงทิศทางของ Xbox ผ่านทาง Project Spark เป็นเรื่องของการใช้ Smart Glass บน Xbox One, Xbox 360 และ Windows 8 ในการเล่นเกมร่วมกัน ด้วยการใช้ remote rendering

ความโหดของงาน Build 2013 ปีนี้คือ ทุกคนในงานจะได้ Surface Pro พร้อม Type Cover และ Acer Iconia W3 ในงาน!!!

หัวข้อหลักๆ ตามนี้

  • Windows 8.1
  • Windows 8 app
  • Windows phone 8
  • Visual Studio 2013 และ .NET Framework 4.5.1
  • Bing platform
  • Xbox platform

ทิ้งท้าย “The future of Windows is very, very bright.” Ballmer

ข้อมูลบางส่วน และติดตามจาก Live from the Microsoft Build 2013 keynote

2013-06-26_000023