Laravel Security

หนึ่งในเรื่องที่ต้องคิดถึงในการเลือกใช้ Framework ที่ทุกคนคิดกันคือเรื่อง Security หรือการรักษาความปลอดภัย เพราะหลายคนก็คิดว่ามันเป็นเรื่องที่ต้องเจอกัน มีทุกงานเขียนทุกงาน เมื่อเราเลือก Framework มาลดภาระงาน งานนี้ก็ควรจะเป็นหน้าที่ของเขาด้วย วันนี้ผมจะไล่ทีละเรื่องให้ทุกคนฟังกัน ข้อมูลส่วนนี้พิมพ์จากการใช้งาน Laravel 3 นะครับ

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

2. Cookie Security ส่วนมากเรามักเจอคือการแก้ไขคุ๊กกี้ ซึ่งจุดนี้ Laravel ก็มีป้องกันไว้แล้วเช่นกัน โดยสร้าง signature hash มาตรวจสอบ ถ้ามีการแก้ไขค่า hash จะไม่ตรงกัน หาอ่านได้ที่ Cookies

3. SQL-Injection เรื่องนี้ไม่ต้องท้าวความเลย มีป้องกันไว้เหมือนกัน โดย Laravel จะทำงานผ่าน PDO หาอ่านได้ที่ PDO/Prepared statements and stored procedures สรุปให้สั้นๆ คือ ถ้าเรียกทำงานผ่าน Fluent หรือ Eloquent มันก็จะจัดการให้เสร็จ ส่วนถ้าใครอยากเขียน query ดิบๆ ก็ควรเขียนตามไกด์อันนี้ Raw Queries

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

หวังว่าโพสนี้จะช่วยลดความกังวลในการเลือกใช้ Laravel นะครับ

ทำระบบล็อกอินแบบโครตง่ายบน Laravel

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

1. สิ่งที่คุณต้องมีคือฐานข้อมูลตาราง users กับโมเดลตามมาตรฐาน Eloquent เลย คือ มีฟิลด์ id, username หรือ email (จะมีทั้งคู่ก็ได้) และ password เรื่องการสร้างโมเดลหาอ่านได้ที่เว็บ Laravel เลยครับ ตั้งค่าการติดต่อฐานข้อมูลให้เสร็จด้วยนะครับ

2.กำหนด route.php ตามนี้เลย

Route::any('/user/login', 'user@login');

3. สร้าง controller ชื่อ user.php แล้วก็ตามนี้เลย

<?php

class User_Controller extends Base_Controller {

	public $restful = true;

	public function __construct() {
		parent::__construct();
	}

	public function get_login()
	{
		return View::make('user.login')->with('error', Session::get('error'));
	}

	public function post_login()
	{
		$userinfo = array(
			'username'    => strtolower(Input::get('email')),
			'password'     => Input::get('password'),
			'remember'    => Input::get('remember')
		);

		if ( Auth::attempt($userinfo) )
		{
			return Redirect::home();
		}
		else
		{
			return Redirect::to('user/login')
				 ->with('error', 'อีเมล์หรือรหัสผ่านไม่ถูกต้อง')
				->with_input();
		}
	}

}

4. สร้าง view user/login.blade.php

<div class="span8 offset2 well">
	<h2>เข้าสู่ระบบ</h2>
	<hr />
	{{ Form::open(URL::current()) }}

	@if (!empty($error))
		<div class="alert alert-error">{{ $error }} </div>
	@endif

	<div class="control-group">
		{{ Form::label( 'email', 'อีเมล์', array( 'class' => 'control-label')) }}
		<div class="controls">
			<div class="input-prepend"><span class="add-on"><i class="icon-envelope"></i></span>
				{{ Form::text( 'email', Input::old( 'email')) }}
			</div>
		</div>
	</div>

	<div class="control-group">
		{{ Form::label( 'password', 'รหัสผ่าน', array( 'class' => 'control-label')) }}
		<div class="controls">
			<div class="input-prepend"><span class="add-on"><i class="icon-lock"></i></span>
				{{ Form::password( 'password') }}
			</div>
		</div>
	</div>

	<div class="control-group">
		<div class="controls">
			<label class="checkbox">
				{{ Form::checkbox( 'remember', '', Input::old('remember')) }} จดจำการล็อกอิน
			</label>
		</div>
	</div>

	<div class="controls">
		{{ Form::submit( 'เข้าสู่ระบบ', array( 'class' => 'btn btn-success' ) ) }}
	</div>

	{{ Form::close() }}
</div>

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

ปล. ถ้าหน้าตาออกมาแปลกๆ ให้ลง bundle bootstrapper นะครับ เพราะผมใช้ตัวนี้อยู่ครับ
ปล2. จริงๆ สามารถเขียน controller ให้สั้นกว่านี้ได้อีก แต่แบบข้างบนนี้จะคุมการใช้งานได้ดีกว่าหน่อยครับ

Dark theme for Laravel Docs

This post is short bacause it’s about my css modified that for my need. I found laravel put laraverl’s docs inside package and I can view this via route name “docs”. I want to modified to dark theme for my eye can read easier. If you want same as me, you can do follow these steps.

  1. open http://paste.laravel.com/8Rs
  2. copy and replace all code inside /public/laravel/css/style.css
  3. go to your laravel public folder via webbrowser with “docs” route such as “http://localhost/my_project/public/docs/” and see!

I hope you like it.  /ee

EDIT: New css – fix bg color of “.content table th”