質問: ### 前提・実現したいこと 現在、初めてPythonでCGI部分を作成し、Webサービスを作成し、昨日動作確認までは行ったのですが、1点分からない点があり、質問させていただいております。 ### 質問内容・該当のソースコード 質問させていただきたいのは、Pythonで作成したコードを秘匿できるかどうかという点です。 現在、以下のような形で、htmlのボタンをクリックすると、test.pyに飛び、test.pyで作成したフォームが呼び出されるのですが、この際test.pyはクライアントPCにダウンロードすることができるのでしょうか?(中身が見えてしまうのでしょうか?) ``` ``` 以前はWeb上で使用できるツールの作成はsilverlightで作成していたのですが、silverlightのサポートが2021年に終了するということで、PythonもしくはCGIを勉強して各ツールを作り直そうと考えているのですが、中身が丸見えになってしまうようであれば、もうしばらくsilverlightで作成しようかと考えています。 100%ソースコードを秘匿するのは難しいのかもしれませんが、ご教授いただけると助かります。 宜しくお願いします。
回答: 基本的には、ですが、サーバー側の言語のコードを見ることは、ブラウザからアクセスした場合はできません。 見ることができるのはブラウザに出力する命令(echo,printなど)で書かれた中身だけです。当然、ダウンロードもできません。 下記のように書かれていたとして、 ``` print("Hello world!") ``` ブラウザからアクセスした場合には ``` Hello world! ``` しか表示されません。 たまにローカルPCにWebサーバー(Apache)などを立ち上げて実行する際にApacheの実行し忘れやブラウザにそのままプログラムをドロップして動作確認しようとして「コードがそのまま表示されてしまう」といった現象を初心者さんが目の当たりにしますが、レンタルサーバなどのちゃんとしたWebサーバー上であればそういったことは起きません。 コードが実際に見えてしまうと、データベースのアクセス方法やテーブルの情報なども見えてしまいますよね。 これでは意味がありません。 もちろんそういった秘密性の高い内容を含むコードは実際には何も出力しなかったとしても、「どういうところにある」ことすら隠蔽すべく、Webからアクセスできない階層に置いたりということはフレームワークではよく行われることですが、 いずれにしてもダウンロードも出来ません。 実際に色々やってみると良いです。 teratailも実際はPHPのフレームワークCakePHPで作られているようですが、「名前をつけて保存」で保存されるのは見えているもの、つまりHTMLと画像とCSS・JavaScriptといった「クライアントサイドのリソース」のみです。