0

データベースに新しいプロジェクトを書き込むスクリプトがあります。このスクリプトには、name="omschrijving"のtextarea要素があります。このテキストエリアでは、ユーザーはcssでスタイル設定した<li>要素を指定できます。

問題は、次のように入力すると、データベースで<li> hello </ li>が:&lt; li> hello&lt;/li>になることです。

にtextareaの値を格納するために、mediumtextタイプの列を使用します。

私のフォームのコード:

<form action="nieuwproject.php?action=toevoegen" method="post">

                            <fieldset class=""> <!-- Set class to "column-left" or "column-right" on fieldsets to divide the form into columns -->



                                <p>
                                    <label>Naam</label>
                                    <input class="text-input medium-input datepicker" type="text" id="medium-input" name="naam" />
                                </p>

                                <p>
                                    <label>Categorie</label>
                                    <select name="categorie" class="text-input medium-input">
                                       <?php $oObj->getCategorieDropdown(); ?> 
                                    </select>
                                </p>

                                <p>
                                    <label>Opdrachtgever</label>
                                    <input class="text-input medium-input datepicker" type="text" id="medium-input" name="opdrachtgever" />
                                </p>

                                <p>
                                    <label>Omschrijving</label>
                                    <textarea class="text-input textarea wysiwyg" id="textarea" name="omschrijving" cols="79" rows="15"></textarea>
                                </p>

                                <p>
                                    <label>Werkzaamheden</label>
                                    <textarea class="text-input textarea wysiwyg" id="textarea" name="werkzaamheden" cols="79" rows="15"></textarea>
                                </p>

                                <p>
                                    <input class="button" type="submit" value="Submit" />
                                </p>

                            </fieldset>

                            <div class="clear"></div><!-- End .clear -->

                        </form>

私の挿入スクリプトのコード:

function addProject() {
    $this->sQuery = "INSERT INTO projecten (naam,opdrachtgever,omschrijving,werkzaamheden,categorie) 
        VALUES ('" . $_POST['naam'] . "','" . $_POST['opdrachtgever'] . "','" . $_POST['omschrijving'] . "','" . $_POST['werkzaamheden'] . "','" . $_POST['categorie'] . "')";
    $this->rResult = mysql_query($this->sQuery);
}

誰かがこれを修正する方法を知っていますか?このスクリプトはハッカーにとってはお菓子であると私は知っているので、それを指摘する必要はありません。

よろしくお願いします。

マイケル

4

2 に答える 2

2

もちろん。
データベース用のデータを処理するコード内の場所を見つけて、htmlspecialchars/htmlentitiesそれを取り除くだけです。

データベースがそれ自体の意志でシンボルを追加することは決してないことを保証できます。
データに変更/追加されるすべてのシンボルは、いくつかのPHPコードの結果です。

クエリの形式が正しくないことに注意してください。
すべてのリテラルを個別にフォーマットするか、プリペアドステートメントを使用してフォーマットする必要があります。
それはあなたの問題とは無関係ですがli&gt、あなたのアプリケーションのエラーと脆弱性には関係があります

于 2013-02-22T14:34:25.423 に答える
0

http://php.net/manual/en/function.htmlentities.php http://www.php.net/manual/en/function.htmlspecialchars.php

私の知る限り、MySQLはこのようにHTMLをサニタイズしないので、コード内の何かがまたはを$_POST['omschrijving']通過しています。これらの関数のいずれかが、データベースに表示されている出力を生成します。htmlentities()htmlspecialchars()

編集:

それがあなたのWYSIWYGエディターであるというあなたのコメントを見たところです。いいキャッチ!

于 2013-02-22T14:40:23.723 に答える