Laravel逆引きTips – Security

Laravel Laravel

Laravel逆引きTIps一覧へ戻る

CSRF保護

<form method="POST" action="/profile">
    @csrf
</form>
HTML

または

<meta name="csrf-token" content="{{ csrf_token() }}">
HTML

XSS対策

Bladeテンプレートでの自動エスケープ

{{ $userInput }}
HTML

HTMLを許可する場合は {!! !!} を使用(注意して使用)

{!! $allowedHtml !!}
HTML

JavaScript内でPHPの変数を使用する場合

<script>
    var userInput = @json($userInput);
</script>
HTML

SQLインジェクション対策

// クエリビルダの使用
$users = DB::table('users')
    ->where('status', '=', 'active')
    ->get();

// Eloquent ORM の使用
$users = User::where('status', 'active')->get();

// プリペアドステートメントの使用(必要な場合)
$results = DB::select('select * from users where id = ?', [1]);
PHP

ファイルアップロードのセキュリティ

public function secureFileUpload(Request $request)
{
      $validator = Validator::make($request->all(), [
          'file' => 'required|file|mimes:jpeg,png,pdf|max:2048',
      ]);

      if ($validator->fails()) {
          return redirect()->back()->withErrors($validator);
      }

      if ($request->file('file')->isValid()) {
          $path = $request->file('file')->store('uploads');
          // $path を使用してファイルを保存
      }
}
PHP

暗号化と復号

    // 暗号化
    $encrypted = Crypt::encryptString('Hello world');

    // 復号
    $decrypted = Crypt::decryptString($encrypted);
PHP

モデルの属性を自動的に暗号化

app/Models/User.php
protected $encryptable = ['secret_key'];
PHP

セキュアなセッション管理

config/session.php
'driver' => 'file',
'lifetime' => 120,
'expire_on_close' => false,
'encrypt' => true,
'secure' => true, // HTTPS only
PHP
// セッションデータの保存
session(['key' => 'value']);

// セッションデータの取得
$value = session('key');

// セッションデータの削除
session()->forget('key');

// すべてのセッションデータを削除
session()->flush();
PHP

Laravel逆引きTIps一覧へ戻る

Follow me!

コメント

PAGE TOP
タイトルとURLをコピーしました