問題が発生しました。次のコードスニペットを作成しました。
teksti = teksti.Trim()
teksti = Replace(teksti, "<", "& lt;")
teksti = Replace(teksti, ">", "& gt;")
teksti = Replace(teksti, """", "& quot;")
teksti = Replace(teksti, "'", "& #8217;")
teksti = Replace(teksti, "%", "& #37;")
teksti = Replace(teksti, "&", "& amp;")
teksti = Replace(teksti, "#", "& #35;")
teksti = Replace(teksti, "@", "& #64;")
これを書いた後、私はそれがそれ自身の問題になることに気づきました。この関数は、HTMLおよびSQLインジェクションに対して情報を安全にすることになっています(他のメソッド、パラメーター化されたクエリなどもありますが、それは重要ではありません)。ただし、すべての置換文字列には&、#、および;があるため、最初にで置換<
され& lt;
、次に新しく書き込まれた文字列の置換に進みます。それにサインインします。
ヒントはありますか?これに正規表現を使用することを考えましたが、十分に単純な適切なVisualBasicの例は見つかりませんでした。
編集:ヒントをありがとう。これを行うための「スマート」で簡単な方法があると確信していましたが、結局のところ、利用できる一般的な方法はないと思います。問題のケースを最初に再配置することは、ここでの明白な解決策です。ありがとうございます。仕事の日が長すぎて気付かなかったと思います。:D
パラメータ化されたクエリについては、もう一度確認すると、英語が意図したとおりに出てこないことがわかります。私はすでにそれらを使用していると言うつもりでした。ここでのこの問題は、後で同じ文字列を使用するあらゆる種類のhtml-injectionと可能なsql-injectionを防ぐために固有のものです。助けてくれてありがとう。