• 受付中

報酬付き

laravelのバリデーション

laravel(api)+Vue,jsでシステム開発をしております。 バリデーションについて質問です。 laravelにおいて、例えば、検索キーワードの「1' or '1' = '1';-- 」や 登録値で「\」などは、バリデーションではじいたり、明示的にエスケープする必要があるのでしょうか。 Eloquent、クエリビルダでは自動でエスケープされる認識です(whereRawなどを除く)が、脆弱性診断で引っかかった(偽陽性可能性あり)ので質問させていただきました。 よろしくお願いいたします。

みんなの回答

回答No.1

>登録値で「\」などは、バリデーションではじいたり、明示的にエスケープする必要があるのでしょうか。 「バリデーション」は、入力した値をチェックすることですので、正確には、「SQLインジェクション対策」と思います。 本題ですが、対応は、必要無いと思います。 実際に試してみましたが、こちらの環境では select * from users where email = @P1 のようになってましたので、SQLインジェクションの対策がされていました。 参考 https://trans-it.net/laravel-sqli/ 確かに、whereRawと、statementは不必要に使わない方が良さそうです。

全文を見る
すると、全ての回答が全文表示されます。

ベストアンサー獲得でポイントゲット!

関連するQ&A

  • HTTPヘッダー制御について

    現在、vue、laravelを使って開発をしています。 基本的なことになりますが2つ質問があります。 よろしくお願いします。 ① 例えば、リクエストヘッダに、 『Content-Type:text/plain; charset=UTF-8』があった場合、 laravelが、『受け取ったのは「テキストでUTF-8」だな』と判断しているのでしょうか。 ② 例えば、レスポンスヘッダに、 『Content-Type:text/plain; charset=UTF-8』があった場合、 ブラウザ、もしくはaxios(js?)が、『受け取ったのは「テキストでUTF-8」だな』と判断しているのでしょうか。

    • 締切済み
    • PHP
  • キーワードランキングAPI(yahoo!)について

    API初心者です。yahoo!ショッピングが公開しているキーワードランキングAPIについて質問させてください yahoo!ショッピングでネットショップを運営しているのですが、seo対策の一環で旬なキーワードの動向はつねに把握したいと考えています。 こちらのAPIを使えばYahoo!ショッピングで検索されている人気の検索キーワード情報を取得できるという事で使い方を把握しようと自分なりに奮闘しました↓ http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/queryranking.html なんとか頑張ってキーワードの順位を取得する事には成功したのですが、データの集計開始日と集計終了日を指定する方法がどうしても分かりません。以下のソースにどのような記述を付け足せば任意のデータ集計期間の情報を取得できるようになるのでしょうか? <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>爆速JSONP</title> </head> <body> <script src="http://i.yimg.jp/images/yjdn/js/bakusoku-jsonp-v1.js" data-url="http://shopping.yahooapis.jp/ShoppingWebService/V1/json/queryRanking" data-p-appid="アプリケーションID" data-p-category_id="検索キーワードの動向を知りたいカテゴリ" > 1位 {{#ResultSet}} {{#0}} {{#Result}} {{#1}} {{Query}} {{/1}} {{/Result}} {{/0}} {{/ResultSet}} <br> 2位 {{#ResultSet}} {{#0}} {{#Result}} {{#2}} {{Query}} {{/2}} {{/Result}} {{/0}} {{/ResultSet}} <br> 3位 {{#ResultSet}} {{#0}} {{#Result}} {{#3}} {{Query}} {{/3}} {{/Result}} {{/0}} {{/ResultSet}} <br> 4位 {{#ResultSet}} {{#0}} {{#Result}} {{#4}} {{Query}} {{/4}} {{/Result}} {{/0}} {{/ResultSet}} <br> 5位 {{#ResultSet}} {{#0}} {{#Result}} {{#5}} {{Query}} {{/5}} {{/Result}} {{/0}} {{/ResultSet}} </script> </body> </html> お詳しい方のアドバイスを拝借したいと思い質問させていただきました。よろしくお願い致します。 m(_ _)m

    • ベストアンサー
    • PHP
  • access クエリで集計した数値を別クエリで使いたい

    access2003で2000ファイル形式で以下のものを作っています。 テーブル「A」(フィールドは登録番号(主キー)、 書名) 「B」(登録番号(主キー)、 書名) がある。Aの「登録番号の最大値」(100とする)をクエリ(クエリ名「集計クエリ」)で集計して得た。 テーブルBの登録番号(1~30とする)を更新クエリで(1+100 ~ 30+100)に更新したい。そこでデザインビューで登録番号フィールド(テーブルB)の「レコードの更新」欄にビルダーで「[B]![登録番号]+[集計クエリ]![登録番号の最大値]」と入力して実行したら 実行できなかった。(仕方ないので「[B]![登録番号]+100」として実行したら更新できた。)今後もあるので「集計クエリ」で得た値を直接呼んで、更新クエリを実行したいのだが・・・。 わかりにくい質問で恐縮です。ご理解頂けたならば、ご教授ください。

  • Laravel5 laravel-debugger

    Laravel5でlaravel-debuggerをインストールしたのですが、Debugbar::info($object);が出来なくて困っています。デバッグバー自体は表示されて、正常に動いているようなのですが、info()をすると、Call to undefined method DebugBar\DebugBar::info()または、Call to undefined method Barryvdh\Debugbar\Middleware\Debugbar::info()のエラーが出てしまいます。 composer.jsonでの記述 "require": { "laravel/framework": "5.0.*", "barryvdh/laravel-debugbar": "~2.0" }, config/appでの記述 'providers' => [ /* * Laravel Framework Service Providers... */ 'Illuminate\Foundation\Providers\ArtisanServiceProvider', 'Illuminate\Auth\AuthServiceProvider', 'Illuminate\Bus\BusServiceProvider', 'Illuminate\Cache\CacheServiceProvider', 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider', 'Illuminate\Routing\ControllerServiceProvider', 'Illuminate\Cookie\CookieServiceProvider', 'Illuminate\Database\DatabaseServiceProvider', 'Illuminate\Encryption\EncryptionServiceProvider', 'Illuminate\Filesystem\FilesystemServiceProvider', 'Illuminate\Foundation\Providers\FoundationServiceProvider', 'Illuminate\Hashing\HashServiceProvider', 'Illuminate\Mail\MailServiceProvider', 'Illuminate\Pagination\PaginationServiceProvider', 'Illuminate\Pipeline\PipelineServiceProvider', 'Illuminate\Queue\QueueServiceProvider', 'Illuminate\Redis\RedisServiceProvider', 'Illuminate\Auth\Passwords\PasswordResetServiceProvider', 'Illuminate\Session\SessionServiceProvider', 'Illuminate\Translation\TranslationServiceProvider', 'Illuminate\Validation\ValidationServiceProvider', 'Illuminate\View\ViewServiceProvider', /* * Application Service Providers... */ 'App\Providers\AppServiceProvider', 'App\Providers\BusServiceProvider', 'App\Providers\ConfigServiceProvider', 'App\Providers\EventServiceProvider', 'App\Providers\RouteServiceProvider', 'Barryvdh\Debugbar\ServiceProvider', ], 'aliases' => [ 'App' => 'Illuminate\Support\Facades\App', 'Artisan' => 'Illuminate\Support\Facades\Artisan', 'Auth' => 'Illuminate\Support\Facades\Auth', 'Blade' => 'Illuminate\Support\Facades\Blade', 'Bus' => 'Illuminate\Support\Facades\Bus', 'Cache' => 'Illuminate\Support\Facades\Cache', 'Config' => 'Illuminate\Support\Facades\Config', 'Cookie' => 'Illuminate\Support\Facades\Cookie', 'Crypt' => 'Illuminate\Support\Facades\Crypt', 'DB' => 'Illuminate\Support\Facades\DB', 'Eloquent' => 'Illuminate\Database\Eloquent\Model', 'Event' => 'Illuminate\Support\Facades\Event', 'File' => 'Illuminate\Support\Facades\File', 'Hash' => 'Illuminate\Support\Facades\Hash', 'Input' => 'Illuminate\Support\Facades\Input', 'Inspiring' => 'Illuminate\Foundation\Inspiring', 'Lang' => 'Illuminate\Support\Facades\Lang', 'Log' => 'Illuminate\Support\Facades\Log', 'Mail' => 'Illuminate\Support\Facades\Mail', 'Password' => 'Illuminate\Support\Facades\Password', 'Queue' => 'Illuminate\Support\Facades\Queue', 'Redirect' => 'Illuminate\Support\Facades\Redirect', 'Redis' => 'Illuminate\Support\Facades\Redis', 'Request' => 'Illuminate\Support\Facades\Request', 'Response' => 'Illuminate\Support\Facades\Response', 'Route' => 'Illuminate\Support\Facades\Route', 'Schema' => 'Illuminate\Support\Facades\Schema', 'Session' => 'Illuminate\Support\Facades\Session', 'Storage' => 'Illuminate\Support\Facades\Storage', 'URL' => 'Illuminate\Support\Facades\URL', 'Validator' => 'Illuminate\Support\Facades\Validator', 'View' => 'Illuminate\Support\Facades\View', 'Debugbar' => 'Barryvdh\Debugbar\Facade', ], もし、分かる方がいらっしゃいましたら、ご教授いただけないでしょうか?よろしくお願いします。

    • ベストアンサー
    • PHP
  • (続き)accessでの2段階クエリの作り方

    お世話になります。 accessで下記の質問を立てましたが、解決できなかったので再度質問いたします。 (http://okwave.jp/qa/q6890851.html) 下記に説明をしています、分かりにくいかもしれません。。 どうぞご指導をお願い致します。 ◆DBの構成◆ 1)テーブル名:名簿(フィールドは下記の通り)  ID,名前1、名前2(担当者名)、ふりがな、住所、電話、住所1、住所2(マンション名等)、備考等) 2)フォーム名:検索フォーム  デザインビューで初めから作成して、テキストボックスを1つ作っています。  名前は『キーワード検索ボックス1』です。  またテキストボックスの下に検索をしてヒットした名簿を表示するサブフォームを入れています。 3)サブフォームのクエリ ・元データ   ⇒名簿のテーブル。全フィールドを挿入して作成。     メインフォーム内のサブフォーム名は『(sub)キーワード検索』  ・抽出条件   ⇒フィールドの『名前1』、『名前2』、『ふりがな』、『住所1』、『住所2』、『備考』の抽出条件欄に    1行ごとずらして、『Like & "*" & [Forms]![検索フォーム]![キーワード検索ボックス1] & "*"    とした。  ・マクロ   ⇒メインフォームのテキストボックスの隣に検索という名前をつけたボタンを配置。    マクロは再クエリでコントロール名を『(sub)キーワード検索』とした。    ボタンのプロパティのイベントタブでクリック時に上記のマクロが実行されるように登録した。 ◆やりたい事◆  accessで会社の顧客名簿を作成しました。  今の状態は1個のキーワードだと検索結果がサブフォームに表示されます。  それを、2段階で絞りこんでいく方法を探しています。  テキストボックスをもう一個作り、2個のキーワードで絞りこみたいです。   まず、1個のキーワードで『名前1』、『名前2』、『ふりがな』、『住所1』、『住所2』、『備考』のフィールドを検索してヒットしたものをサブフォームで表示させる。さらにそこから、また任意のキーワードを 『キーワード検索ボックス2』に入力してボタンをクリックすると、同じサブフォーム(または別のフォームに)絞りこみ検索結果が表示されるようにしたい。またVBAは苦手なので、クエリで解決をしたいです。   ◆出来たこと、出来なかった事◆ ・質問NO(6890851)で指導を頂いた、chuparkさんのある一つのフィールドに 『Like "*" & [Forms]![検索フォーム]![名前検索1] & "*" And Like "*" & [Forms]![検索フォーム]![名前検索2] & "*"』と入れると、そのフィールドに対しては2個のキーワードがヒットするとサブフォームに表示される事が出来た。 ⇒これだと1つのフィールドに対してなので、やりたい事ではない。  1つのフィールドだけでなく、検索したいフィールド全てに対してまず1個のキーワードで  検索されたものを表示させ、そこから更にキーワードを検索して表示させたい。   ・クエリに新しいフィールドを作りました。そこは全てのフィールドを『&』で結び、 抽出条件にchuparkさんの条件を入れてました。 ⇒これだと一度に2個のキーワードを検索してしまう。1回目と2回目を比較もしたいので、一度ではなく、段階を踏んで検索が出来ない。また、フォーム自体を開いた時にサブフォームが真っ白になり メッセージも出て見辛い。。(どんなメッセージが忘れました…)                                                        以上

  • アクセス2003で検索条件と検索キーワード検索

    アクセス2003で検索機能を作りたいです。 まずプルダウンで検索条件を選び、さらに検索キーワードを手入力し、その条件に見合ったものを抽出するという形。 検索条件とは、フィールド名。検索キーワードは、フィールドの中にある言葉。 質問 (1)マクロのフィルタの実行のwhere条件式において 〔フィールド名〕like~と入れているのですが、この頭のフィールド名をいじくれば良いのか? (2)ある識者に伺ったところ、次のVBA(イベントビルダ)を教わりましたが、オブジェクトに値を代入できませんと出てきました。 Me.filter=""&Me.![テキスト名1]&"like'"&"*"&Me![テキスト名2]&"*"&"'" Me.filterOn=True このテキスト名1をコンボに変更しました(非連結)。検索条件となるあるテーブルを値ソースとしています。何か自分が間違っていますか? できれば、クエリを使うことなく行きたい。 アクセスのつくりとしては、 基幹となるテーブルAとそれに1対多にあるテーブルBそしてテーブルBと1対1にあるテーブルCの3つをクエリを用いて1つのフォームに表しています。 その中のいくつかのフィールドを選択条件とし(プルダウンで選ぶ)、キーワード入力する。 小職、アクセスを始めたばかりです。どうかよろしくお願いいたします

  • レコード登録時に「演算子がありません」構文エラーが発生

    【開発言語】 ・C# 【開発環境】 ・Vistual Studio 2005 【質問】 Access databaseに以下のコードでテーブル「Keyword」にレコードを登録しようとしたが、構文エラーが発生した。 --------------コード(ここから)------------- strTmp = "[FM] Group failure for {%GUID}, but can't move. Failure count = {%Count}."; strTmp1 = strTmp.Replace("'", "''"); strSQL = "INSERT INTO Keyword([EventID], [Keyword], [OrderNum]) VALUES(" + EventID + ", '" + strTmp1 + "', " + (num + 1) + ")"; --------------コード(ここまで)------------- しかし、実行時にSQL構文エラーが発生した。 --------------エラーメッセージ(ここから)------------- 'System.Data.OleDb.OleDbException' の初回例外が System.Data.dll で発生しました。 例外発生。ex.Message = クエリ式 '', but can't move. Failure count = ')' の構文エラー : 演算子がありません。 --------------エラーメッセージ(ここまで)------------- 「'」を「''」にエスケープしたにもかかわらず、構文エラーが発生した理由が分かりません。デバッグでSQL文を表示させてみると: strSQL = INSERT INTO Keyword([EventID], [Keyword], [OrderNum]) VALUES(99, '[FM] Group failure for {%GUID}, but can''t move. Failure count = {%Count}.', 1); になっていますので、問題なさそうに見えます。 なお、興味深いのは strTmp = "but can't move"; に変更した場合はSQL文が正常に実行されました! やっぱり、「'」以外の何かの記号もエスケープする必要があったのでしょうか? これから私自身も色々と切り分けしてみますが、もしご存知の方がいらっしゃいましたらぜひお知恵をお貸しください。 よろしくお願いいたします。

  • Laravelの解説がよくわからないです。

    http://ysktec.com/shiguregaki/blog/?p=1163 の.envの変更の部分 がよくわからないのですが、 DB_DATABASE=<事前準備で作成したデータベース名> など三つのdbを作る部分は恐らくsqlを使ってDBをいじるという事でしょうが、 この記述をenvファイル内に記載してこのファイルを実行してテーブルなどを作るという事でしょうか? phpmyadminで作っても結局同じなのでしょうか? とても良いサイトなのですが このサイトの説明がいまいちわかりません。 DB_DATABASE=<事前準備で作成したデータベース名> これはどこに記載するのですか下記のマイグレーションファイル内ではないですよね? Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps();

  • Access オプションボタンで検索対象の切替

    ▼やりたい事 フォームにテキストボックスを利用した検索画面を配置しております。 ここにキーワードを入れて商品の検索をするのですがこの時、検索対象を「テーブルから」か「クエリから」か選べるようにオプションボタンを作りたいと考えております。 ▼現状のデータ 【テーブルA】:商品情報の元データです。 【クエリA】:商品情報変更後のデータです。テーブルAを参照して変更後のデータに見せています。 テーブルとそれを参照しているクエリのフィールドは同じです。 テーブルAのフィールド1が「n」の時、クエリAのフィールド1は「フィールド1: "d"」のようにしています。 理由は元データと変更後のデータ、別で持つとテーブル数が30以上できる為、分かりづらいと思ったからです。 また、今後商品が増えた際に、元データを追加するだけで変更後のデータとしてクエリで見せかける事ができる為です。 例ではテーブルAとクエリAの存在しか明示しておりませんが、このような関係のデータが複数あり、内容もテーブルAとテーブルB…では違う為、1つのテーブルにまとめるような事も考えておりません。 ▼質問 オプショングループを作成し、共通フィールド2のオプション値をテーブルは「0」、クエリは「1」としたのですが、オプショングループのコントロールソースに当てはまる式をどう書けばいいのかつまづいてしまいました。 元データと変更後データを同じテーブル内に保存しないとオプションボタンは機能しないのでしょうか? また、他に検索対象を「テーブルから」か「クエリから」か選べるようにするにはどんな方法がありますか? 参考になるWEBページ、書籍、又は作成する上でのヒントをいただけましたら幸いです。 作業環境は、OS:Windws7、使用ソフト:Access2003です。 宜しくお願い致します。

  • HTMLのバリデーション

    以下のHTMLにHTML5の入力値バリデーションを使用して、各入力項目のinputタグを記述する場合、年齢の項目のバリデーション処理を教えてください。 各項目のチェック条件 ・氏名:必須チェック ・郵便番号:必須チェック、半角数字3桁、半角ハイフン、半角数字4桁の形式(例:123-4567) ・年齢:必須チェック、半角数字のみ入力、0~120までの入力のみ可能 ・URL:url形式 <body> <main id="content"> <form method="post"> <div> <label for="name">氏名</name> <input id="name" required> </div> <div> <label for="zipcode">郵便番号</name> <input id="zipcode" pattern="\d{3}-?\d{4}" required> </div> <div> <label for="age">年齢</name> <input id="age" /> </div> <div> <label for="url">URL</name> <input id="url" type="url"> </div> <div> <input type="submit" value="送信" /> </div> </form> </main> </body>

    • ベストアンサー
    • HTML
質問する