Laravel が標準で守ってくれるものと、自分で書く必要があるものの区別として正しいのはどれですか。
自動で守られるのは Query Builder 経由の SQL インジェクション、Blade のエスケープ、web グループでの CSRF です。生SQLや生出力に落ちた瞬間、そこは自分の責任になります。
面接官が見ているのはフレームワーク任せの範囲を把握しているか。
よくある答えと、面談でどう見られるか
- SQLi・XSS・CSRF は標準で守られるが、認可(誰がどのデータを見てよいか)は自前
その通りです。ただし生SQLを書けば SQLi は自分の責任になり、{!! !!} を使えば XSS も素通りします。 - フレームワークが全部守ってくれるので、意識する必要はない
認可は完全に自前です。ここが最も抜けやすい箇所です。 - 何も守ってくれないので、すべて自分で実装する
標準で守られる範囲を知らないと、車輪の再発明か二重実装になります。 - CSRF はどのルートでも自動的に守られる
web ミドルウェアグループのルートだけです。api では適用されません。
面接官は何を見ているか
- 自動で守られるもの(SQLi / XSS / CSRF)を挙げた
- 自分で書くもの(認可 / 権限 / 業務ロジック)を挙げた
- 自動が効かなくなる条件に触れた
模範解答
自動で守られるのは、Query Builder 経由のSQLインジェクション、Blade の {{ }} によるXSS、web ミドルウェアグループでのCSRFです。ただし、生SQLを書けばSQLiは自分の責任になりますし、{!! !!} を使えばXSSも素通りします。認可——「このユーザーはこのデータを見ていいか」——は完全に自前です。ここが一番抜けやすいところだと思います。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。
観点をすべて押さえられた場合
マスアサインメント脆弱性は、具体的にどう起きますか。一部しか触れられなかった場合
Blade の {{ }} と {!! !!} は何が違いますか。