HTTPリクエストを捕捉してHTTPSにリダイレクトする方法
日付 | 2009/05/08 |
---|---|
ID | 75313 (英語原文参照) |
バージョン | 11.4 |
プラットフォーム | Mac & Win |
データベースに対するWebアクセスをセキュアなものに限定するメカニズムは4Dにありません。しかし、次のような方法を使えば、そのことを実現できます。
デコイのWebフォルダを使用すれば、すべてのリクエストはOn Web Connectionデータベースメソッドで処理することができます。具体的には、環境設定で選択したものとは別の場所にHTMLファイルをすべて置き、選択したフォルダは空にしておきます。このようにすれば、すべてのURLは無効なものになり、確実にOn Web Connectionデータベースメソッドが呼ばれるようになるからです。
次の図では、環境設定で選択されているWebFolderは空であり、デコイです。 Webフォルダにすべてのファイルが保存されています。
このようにセットアップしておき、On Web Connectionデータベースメソッドでは、リクエストがセキュアな接続かどうかを調べます。そうでなければ、リクエストをリダイレクトします。セキュアな接続であれば、リクエストを処理します。
` ` Database method: On Web Connection ` C_TEXT($1;$2;$3;$4;$5;$6) C_TEXT(WebFolder_t;requestedFile_t) WebFolder_t:=Get 4D folder(Database Folder )+"web" ` This is the actual root folder for your html files ` I used a folder named "web" placed next to the structure ` NOTE: this folder must be different than what is selected ` as the HTML Root Folder in the Preferences, also the HTML ` Root Folder (from preferences) should be empty requestedFile_t:=WebFolder_t+(Replace string($1;"/";"\\")) ` This the path to the document being requested on the local file system ` NOTE: the "Replace string" command above is replacing ` the path delimiter for Windows, Macintosh should use : instead of \\ If (Secured Web connection) ` already secure connection If ((Test path name(requestedFile_t)=1)) ` A file exists at the location requestedFile_t refers to ` ` NOTE: ` if you wanted to, you can do additional checks on the file ` or path to filter out unwanted strings/urls in this section of code. ` ` For this example, i am just sending the file if it exists SEND HTML FILE(requestedFile_t) ` file exists so send it Else ` file does not exist at the location (could be a folder) SEND HTML TEXT("404") ` Handle the 404 error ` NOTE: you can handle the 404 differently, this is just a quick example. End if Else ` not a secure connection SEND HTTP REDIRECT("https://localhost"+$1) ` Redirect to the secure site ` NOTE: for this example i used localhost (don't forget to change this) End if