0

正規表現に関する簡単な質問: このコードは、私が行う必要のあるグルーミングで機能しますか? (つまり、これをデータベースに入力して安全にできるか?)

function markdown2html($text) {
        $text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
    // Strong Emphasis
    $text = preg_replace('/__(.+?)__/s', '<strong>$1</strong>', $text);
    $text = preg_replace('/\*\*(.+?)\*\*/s', '<strong>$1</strong>', $text);

    // Underline
    $text = preg_replace('/_([^_]+)_/', '<p style="text-decoration: underline;">$1</p>', $text);
    //Italic
    $text = preg_replace('/\*([^\*]+)\*/', '<em>$1</em>', $text);

    // Windows to Unix
    $text = str_replace('\r\n', '\n', $text);
    // Macintosh to Unix
    $text = str_replace('\r', '\n', $text);

    //Paragraphs
    $text = '<p>' . str_replace("\n\n", '</p><p>', $text) . '</p>';
    $text = str_replace("\n", '<br />', $text);

    // [Linked Text](Url)   
   $text = preg_replace('/\[([^\]]+)]\(([a-z0-9._~:\/?#@!$&\'()*+,;=%]+)\)/i', '<a href="$2">$1</a>', $text);

   return $text;

}
4

3 に答える 3

1

いいえ、絶対に違います。

あなたのコードは SQL とは何の関係もありません。つまり、文字を変更し'たり、\文字をまったく変更したりしません。この関数の書式設定機能と SQL エスケープを混在させるのはばかげています。

状況によっては、コードが HTML インジェクションを導入する可能性もあります。URL リンクの正規表現が特に疑わしいです。適切なパーサーが含まれていなければ、1 インチも信用できません。

于 2013-01-15T02:06:45.040 に答える
0

いいえ、その関数を通過した後のデータの安全性は保証できません。

SQL に依存する文字をエスケープするか、PDO/Mysqli を使用する必要があります。とにかく、準備されたステートメントははるかに便利です。

クエリを一緒にハッキングする古い方法を使用しないでください。

$query = 'select * from table where col = '.$value;

あなたはそこでトラブルを求めているだけです。

于 2013-01-15T02:00:14.187 に答える
0

いくつかのことが私に飛びつきました:

最初の 2 つの正規表現 ('/__(.+?)__/s'および対応する の正規表現*) は ___word___ と ***word*** を正しく処理しないと思います –– それらは 3 番目の文字を単語の一部として扱うため、*word * (最初の* は太字で、末尾は太字ではありません) の代わりにword .

3 つ目 ( '/_([^_]+)_/') については、本当に適切ですか?

そんなことしたらダメ

に変わる

そうする<p style="text-decoration: underline;">しない</p>

?

もちろん、これらの問題を解決して使えばいいと言っているわけではありません。

于 2013-01-15T03:09:56.247 に答える