CSRF保護
<form method="POST" action="/profile">
@csrf
</form>
HTMLまたは
<meta name="csrf-token" content="{{ csrf_token() }}">
HTMLXSS対策
Bladeテンプレートでの自動エスケープ
{{ $userInput }}
HTMLHTMLを許可する場合は {!! !!} を使用(注意して使用)
{!! $allowedHtml !!}
HTMLJavaScript内でPHPの変数を使用する場合
<script>
var userInput = @json($userInput);
</script>
HTMLSQLインジェクション対策
// クエリビルダの使用
$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
コメント