web-dev-qa-db-ja.com

文字列をデータベースに保存する前にフィルタリングする

IMAPからメールをフェッチし、タイトルとコンテンツをデータベースに保存するスクリプト魔女を作成しました。

もちろん、チェックなしでこれらの情報を保存したくありません。私は少し偏執的ですが、メールのタイトルと内容をチェックせずに保存すれば、MySQL-Injection-Attackを実行することは可能だと思います。

今私の質問:これらの情報をどのように保存できますか?内容を確認するJoomla-On-Board-Methodsはありますか?

前もって感謝します :-)

3
MyFault

MySQL-Injection-Attacksを回避するには、特殊文字を適切にエスケープして引用符で囲む必要があります。例えば:

$query = 'SELECT * FROM #__table WHERE ' . $db->quoteName( $field-name ) . '=' . $db->quote( $field-value );

参照: 安全なコーディングのガイドライン

4
Anibal

すでに正しく説明されているアニバルとしてデータを引用することに加えて、 JFilterInput->clean() を使用してさまざまな入力をクリーンアップできます。これは、データが特定の形式であることが予想される場合に特に役立ちます。したがって、メールのタイトルが空想的なものを含まない単純な文字列であると予想される場合は、

$filter = JFilterInput::getInstance();
$title  = $filter->clean($title, 'STRING');

利用可能なフィルターのdocblockから取得:

INT:       An integer,
UINT:      An unsigned integer,
FLOAT:     A floating point number,
BOOLEAN:   A boolean value,
Word:      A string containing A-Z or underscores only (not case sensitive),
ALNUM:     A string containing A-Z or 0-9 only (not case sensitive),
CMD:       A string containing A-Z, 0-9, underscores, periods or hyphens (not case sensitive),
BASE64:    A string containing A-Z, 0-9, forward slashes, plus or equals (not case sensitive),
STRING:    A fully decoded and sanitised string (default),
HTML:      A sanitised string,
ARRAY:     An array,
PATH:      A sanitised file path,
TRIM:      A string trimmed from normal, non-breaking and multibyte spaces
USERNAME:  Do not use (use an application specific filter),
RAW:       The raw string is returned with no filtering,
unknown:   An unknown filter will act like STRING. If the input is an array it will return an
           array of fully decoded and sanitised strings.
4
Bakual