私は、ユーザーのコンテンツに基づいて99%のウェブサイトを作っています。私は、セキュリティ対xss、csrf、SQLインジェクションとすべての楽しいことについてたくさんのことを読んできました。私はそれをよく理解し、適切なセキュリティを組み込んでいます。私が心配しているのは、より良い方法を探して、パフォーマンスと使用量です。PHP - htmlspecialcharsのパフォーマンスと懸案事項。代替案?
私はユーザー入力を受け入れるという考え方をそのまま理解しています。データベースに入る前にユーザー入力をフィルタリングして検証し、htmlspecialcharsなどでサニタイズで出力します。
ここに事があります。ユーザーがデータベースに追加するすべての「エントリ」には、約30種類の情報が添付されています。
ページを表示している場合。私はそのページだけで約30のhtmlspecialcharsを出力します。それは殺人のように思える。リスティングページまたは検索ページには、これらのアイテムごとに5つ以上の変数があり、20のページには、htmlspecialcharsを100回以上使用すると簡単に表示されます。それは気が抜けているようだ。
これは私の安いサーバーに負担をかけるでしょうか?それを行うより良い方法はありますか?
私の恐ろしい考えです。
(1)データベースに入力するときにストリップタグを使用するのはどうですか?私はhtmlspecialcharsのない属性への出力の脆弱性を理解していますが、すべての変数が出力され、最悪の場合は<h4>$title</h4>
や<li>$info</li>
といったhrefなどの変数にはなりません。これにより、すべてのページの読み込みではなく、1回のサニタイズを行うためにサーバーの使用量が大幅に節約されますか?変数にhtmlspecialcharsを呼び出すことはできますが、属性内に配置する必要があります。
(2)これは恐ろしい考えです。しかし、htmlspecialcharsのテキストをデータベースに直接格納する方法はありますか?私はこれまでのように、このデータを使って何か他のことをしたいと思っていたら、apiを作って、jsonやpdfとして出力して、htmlspecialcharsをデコードしなければならないかどうかを知っています。しかし、そのような状況のどれも私が今までにやることはありません。これは、すべてのページの読み込みではなく1回だけサニタイズするので、サーバーリソースのTONを節約するようです。
(3)テキストのリテラル入力とhtmlspecialcharsバージョンを別の列に保存します。このようにして、ユーザーは入力時に入力内容を確認し、すべてのページ読み込みではなく、データベースへの入力時にhtmlspecialcharsを1回だけ行う必要があります。はい、それ以上のデータベースストレージが、それ以外の問題は?
実際にパフォーマンスに問題があるのですか、将来発生する可能性がありますか?私はあなたがPHPに十分なクレジットを与えていないかもしれないと思います。 –
未来について心配している方は、より良いやり方をするには今私はそれをしたいと思います。 – Incognito
状況に応じたエスケープ処理(出力時に動的データにhtmlspecialcharsを使用すること)を強くお勧めします。将来的にパフォーマンスの問題が発生した場合は、これが原因で発生することに真剣に疑いを持ちます。 –