sql >> データベース >  >> RDS >> Mysql

PHPの実行を制限しますか?

    保護する必要のあるレイヤーがいくつかあります。

    一部のホスティング業者は誤って open_basedir、safe_mode(古いPHP)、disable_functionsなどのPHPの「保護」に依存します。

    PHPでさえ、それらをセキュリティ機能とは見なしていません- http://php.net/security- note.php

    これらはPHPのエクスプロイトで無効にすることができ、システム全体が運命づけられます。しない

    どのように行うべきか

    下部

    • ホストされているサイトごとにOSレベル/システムユーザーを分離する
    • 正しい権限(一方が他方のページを表示/編集できない)-サブディレクトリも同様になるため、正しい権限を持っていることを確認してください
    • 個別のセッションファイル(多くのウェブホスティングは、PHPでホストされている各サイトのセッションファイルを同じディレクトリに配置します。これは悪いことです。

    Apacheはついにこのための独自のモジュールを手に入れました- Apache MPM-ITK 。

    短編小説: これを想像してみてください。ユーザーに(自分のuidの下で)マシン上のシェルを提供します。ユーザーは他のホストされているサイトに対して何もできません。

    1. 異なるuid/gid
    2. システム権限
    3. SELinux、AppArmorなどのフレームワーク
    4. ハードコアになりたい場合はgrsecurity..しかし、システムの保守は難しくなります。

    上がる?

    あなたはよりハードコアを得ることができます。私が見た中で最高のものは、apache(またはあなたが使用するもの)の共有ライブラリです-これは、apacheがLD_PRELOADを使用して開始されたときに使用されます また、system()などの潜在的に悪意のあるシステムコールをすべて実装します。 、execve() そして基本的にあなたが悪いと思う他のどんな電話でも。

    私はまだこれの良い実装を見ていません(どこかでカスタムのものを除いて)-私が間違っているなら私を訂正してください。

    たとえば、このためのホワイトリストを実装してください。 PHPのmail()はデフォルトでsendmailを実行しますが、これは機能しなくなります。

    結論

    従来のdisable_functions、open_basedirなどをグローバルphp.iniに追加し、session.save_pathをすべてのvhostに追加します-セッションをユーザーディレクトリに配置します。ユーザーが何かを共有しないようにしてください 。

    アンダーレイOSレベルの分離を正しく実装します。

    grsecとLD_PRELOADlibフッキングシステムコールでハードコアになりましょう。

    分離、分離、分離.. Dockerのようなシステムは、カーネルレベルでユーザーを分離するためのLXCベースのコンテナーをまもなく提供しますが、まだ完全に本番環境に対応していません(imho)。




    1. このpdo::mysqlコードがWindowsでクラッシュするのはなぜですか?

    2. エラー1038ソートメモリが不足しています。ソートバッファサイズを増やすことを検討してください

    3. casperjsを使用してWebページをスクレイピングしている間に取得したテーブルデータを保存する

    4. SQL Server履歴テーブル-SPまたはトリガーを介してデータを入力しますか?