2011-10-22 14 views
0

私はリンクこのSQL構文エラーを引き起こして何

$text = eregi_replace('(((f|ht){1}tp://)[[email protected]:%_\+.~#?&//=]+)', 
    '<a href="\\1">\\1</a>', $text); 

と、私は次のエラーを取得するデータベースに挿入しようとを含む文字列のうち、クリック可能なリンクを作る機能のこのセクションを実行すると:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'http://sitename.com/alpha/">http://sitename.com/alpha/' at line 1 

構文エラーを修正する方法がわかりません。前もって感謝します!

いいえお返事

+0

これはSQLと何が関係していますか? (そして、なぜあなたはまだ 'eregi_replace()'を使っているのですか?) – BoltClock

+2

実行中の実際のSQL文を投稿できますか?正規表現はSQLとは関係ありません。 – Farray

+0

おそらく引用文(エラーメッセージの内容に基づいて暗黙の推測)と関係があるでしょうが、@Farrayが指摘したように、投稿してください実際のSQL – imm

答えて

4

あなたのSQLには、挿入しようとしているHTMLの引用符がくすんだインジェクションの脆弱性があります。あるいは、あなたが$ text変数をクエリー文字列に挿入したときに引用符を忘れてしまいます。

$test = eregi_replace(blah blah blah); 
$test = mysql_real_escape_string($test); 

$sql = "INSERT INTO yourtable (htmlfield) VALUES ('$test');"; 

は、問題を解決する必要があります:EREG関数ファミリは廃止され、もはや使用するべきではありませんという事実を無視

+0

この問題を解決していただきありがとうございます...テキストはちょうどリンクの場合、どのインジェクションの脆弱性が引き起こす可能性があります - > ttp://x.y.z.com/alpha/?そして、この脆弱性のために正確に何がエラーになっていますか? – algorithmicCoder

+0

あなたはユニコード対応ではないeregを使用しています。誰かが正当なSQLコマンドに何らかの形でeregによって管理されるユニコード文字列を作成することは完全に可能です。これはphpのaddslashesが廃止され、データベースの入力墨塗りに全く役に立たないと宣言された理由です。また、Unicode対応ではなく、悪意のあるUnicode文字列によるSQLインジェクションも可能です。 –

0

私はこれがコードの区切り記号であると考えています。 eregi_replaceは関係なく、廃止予定です。代わりにuse preg_replace()を使用してください。

関連する問題