0

私の会社が従業員に送信していた古い電話帳の拡張である Codeigniter アプリを入手しました。そこで、印刷したい人のために、単純な HTML から紙への印刷よりも堅牢な「印刷」方法を作成してもらいました。アプリは、ユーザーに PDF をダウンロードさせます。ただし、彼らは PDF を簡単に読み取れるようにしたくもなかったので、ユーザーのパスワードで PDF をパスワード保護するように依頼しました。これはすべて、ひどいセキュリティの世界(データベースに生のパスワードを保存する)でうまく機能しました...

PHPass を実装してすべてのパスワードをハッシュすると、PDF 生成部分が壊れます。$this->pdf->SetProtectionCodeigniter で使用する場合、渡すことができるのはハッシュだけです。もちろん、これは PDF のダウンロード後にユーザーが入力しようとしている内容とは一致しません。

PDFで提供されているものを確認する前に、PDFがパスワードを処理する方法を変更することに成功した人はいますか? これまでのところ、私が思いついた唯一の解決策は、ダウンロードする前にパスワードをもう一度入力するように依頼することですが、この余分な手順は避けたいと思います. さらに続ける必要がある場合はお知らせください。ありがとう!

4

1 に答える 1

1

あなたがやろうとしていることは不可能です。ハッシュの目的は、あなたがしていることを正確に防ぐことです。ハッシュは、パスワードが PHPass によってハッシュされると、辞書攻撃またはハッシュ テーブルなしでは元のパスワードを取得できないことを意味する一方向アルゴリズムです。

ただし、これを実装できるようにするためのいくつかの代替手段があり、すべてさまざまなレベルのセキュリティを備えています。

新しいパスワード

最も安全なのは、TCPDFに渡されるPDFをダウンロードするときに、ユーザーに新しいパスワードを入力させることです。

パスワードをキャッシュする

少し安全性が低い別の方法は、ログイン時に Codeigniter または PHP セッションでユーザーのプレーンテキスト パスワードをキャッシュすることです。後で PDF にパスワードを追加する必要がある場合は、セッションに保存されているパスワードを使用できます。個人的には、Codeigniter ではセッション ユーザーデータをデータベースのセッション テーブルのプレーンテキスト json 配列に格納するのに対し、PHP では格納しないため、Codeigniter ではなく PHP セッションを使用します。

function loginHasCompleted() { $_SESSION['password'] = $_POST['password']; }

パスワードを暗号化する

パスワードをハッシュする代わりに、データベースでパスワードを暗号化することもできます。AES-256 などで暗号化することで、パスワードを再度復号化して PDF 生成に使用できます。ただし、攻撃者がパスワードの暗号化に使用される AES キーを取得した場合、攻撃者はすべてのパスワードを平文であるかのように復号化できるため、セキュリティ上の懸念が生じます。攻撃者はデータベースとソース コード内のハードコードされたキーの両方を取得する必要があるため、平文のパスワードよりも安全ですが、それでも懸念事項です。

于 2013-07-11T15:27:10.773 に答える