Tips

HTTPリクエストを捕捉してHTTPSにリダイレクトする方法

日付2009/05/08
ID75313 (英語原文参照)
バージョン11.4
プラットフォームMac & Win

データベースに対するWebアクセスをセキュアなものに限定するメカニズムは4Dにありません。しかし、次のような方法を使えば、そのことを実現できます。

  • デコイ(偽物)のWebフォルダを使用し、あらゆるリクエストをトラップする
  • Apacheをプロキシとして使用する
  • Webアプリケーションファイアウォールを使用する
  • デコイの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