Laravelが(英語圏で)流行りだした頃、便利だからと言って、Input::all()の内容ををそのままcreateに渡すコードが、サンプルコードやチュートリアルなどに多用されていたからです。もともとは、ドキュメントに書かれていました。Laravel3以前のことです。
このコードを書く人は、「フォームに項目を用意しなければ、テーブルの内容には入らない」と考えているのでしょう。でも、フォームから送られてくる内容は改変可能です。ですから、意図しない項目以外が変更される可能性があるという意味で安全ではなかったのです。
その後、アップデートがかかり、このコードは多くの場合、実行時エラーになりました。POSTには通常CSRFフィルターが適用され、フォームに自動的に挿入されるCSRFトークンをテーブルに代入しようとし、エラーが起きました。そこで、Input::only(所得項目名を配列で指定)という書き方が主流になりました。
Laravel4から、この問題に根本的に対応するため、複数代入時(createだけでなくfillなども)に、代入可能なフィールドをホワイトリスト形式か、ブラックリスト形式で、Eloquentモデルに指定する形式となりました。これにより、Input::all()でも安全に代入できるようになりました。
2つ目の質問に対しての答えは、どちらを使用しても関係ありません。Eloqeuntで書いても、クエリービルダーが使用されます。クエリービルダーはPDOを使用し、プリペアードステートメントで指定された引数を指定します。自分でraw()メソッドを使用しない限り、SQLインジェクションは起きないでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。