@Natukasi

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

素人がWEBサイトを公開する危険性について

Discussion

前提のお話

php初心者です。
独習phpを読み、勉強しました。

最低限のログイン機能を備えたお金メモのサイト作りました。
infinityfreeとゆうサイトにアップして運用してます。

セキュリティ対策
・ログインの二段階認証なし
・クロスサイトスクリプティング対策なし
・lalavelなどのフレームワークなし
・SQLエスケープ処理なし。

質問

このレベルの技術力で自分が勤めている会社の社内システム(目標管理)を作って、運用するとします。危険でしょうか。

上に挙げたセキュリティ対策だけすれば安心ですか。

また、このような技術レベルで、WEBサイトを作る場合、セキュリティを気にせず運用する方法が他にありますか。

0 likes

はい。危険です。

何が危険かというと、「なにがどう危険なのか把握できていない」のが一番危険です。
まずは、
 ・誰に、何を提供するのか
 ・誰から、何を守る必要があるか
を把握しましょう。
そして、公開するシステムには「どんな脅威があるのか」を具体的に理解してください。

どこのサイトでシステムを構築すべきか、
どんなセキュリティ対策が必要か、
は、絶対に気にしてください。
「セキュリティを気にせず運用する方法」というのはありません

1Like

社内システムということは社内ネットワークからだけアクセスできるということですよね?そしてその社内ネットワークのセキュリティ対策はなされているのですよね?

0Like

「会社の社内システム」というワードを抜きにして、一般的に個人情報を扱うWebサイトを立ち上げるのであれば、挙げて頂いている要件だけでも不十分で大変危険です。
個人情報を取り扱わないにしても、「外部のサービスを使わず自前でサーバーを用意して」サイトを立ち上げるのであれば、踏み台にされるなどの危険が伴います。
ご参考までに以下をご覧ください。(以下の掲載記事の通りにすれば万全、というわけではありません)
https://zenn.dev/smartvain/articles/ai-attacked-my-code-security-mostly-placebo

0Like

現場でセキュリティ周りも見てきたエンジニアとしての回答です。

結論:そのままの状態で社内システムとして運用するのは危険です。

ただ、「全部やらないとダメ」ではなく、優先順位をつけて対策すれば現実的に運用できます。

最低限やるべきこと(優先度順)

  1. SQLエスケープ処理(最優先)
    これだけは今すぐ対策してください。SQLインジェクションは最も被害が大きく、DB内のデータが全部抜かれます。PDOのプリペアドステートメントを使うだけで対策できます。

// NG

$sql = "SELECT * FROM users WHERE id = " . $_GET['id'];

// OK

$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$_GET['id']]);
  1. XSS(クロスサイトスクリプティング)対策
    出力時にhtmlspecialchars()を通すだけです。お金メモということは金額データが入っているはずなので、ここも必須です。
echo htmlspecialchars($value, ENT_QUOTES, 'UTF-8');

無料でセキュリティを底上げする方法

InfinityFreeで運用されているとのことですが、Cloudflare(無料プラン)を前段に入れるだけでかなりセキュリティが改善します。

• SSL/HTTPS: 無料で自動適用。通信が暗号化される
• WAF(Webアプリケーションファイアウォール): SQLインジェクションやXSSの攻撃パターンをCloudflare側でブロックしてくれる
• DDoS対策: 無料プランでも基本的な対策が有効
• Bot対策: 不審なアクセスを自動フィルタリング
設定手順はドメインのネームサーバーをCloudflareに向けるだけなので、30分もあればできます。

もちろんCloudflareのWAFは完璧ではないので、コード側のSQLインジェクション対策・XSS対策は必ず併用してください。あくまで保険として「万が一コード側で漏れがあっても、Cloudflareが止めてくれる可能性がある」という二重防御の考え方です。

学習の次のステップとして

セキュリティ対策を自分で実装すること自体がとても良い勉強になります。無理せずに頑張ってくださいね。

  1. PDOプリペアドステートメント(SQLインジェクション対策)
  2. htmlspecialchars(XSS対策)
  3. CSRFトークン(フォームの不正送信防止)
  4. パスワードのハッシュ化(password_hash() / password_verify())
    この4つが入れば、素のPHPでも十分実用的なセキュリティレベルになります。フレームワークなしで一つずつ自分で実装する方が、なぜ必要なのかの理解が深まりますよ。
0Like

Your answer might help someone💌