Authentication




Cancel OK
B!コメントする  2011-02-20 22:34:00 by old

正規表現とバグの対応

ブログ内で紹介しているコードは全てDBに入れる際にXSS対策などなどをして格納するわけですが、
それをそのままブログに表示してしまうとリンクや画像が表示されない現象が出てしまうのでちゃんと見えるようにデータを整形してます。
 そこでまたやらかしちゃったわけですが、コード紹介の中でaタグによるリンクを使っている場合は、コードとして表示されずに普通にリンクとして表示されてしまっていました。
要はDBから取り出した直後はHTMLエンティティ化されているので、リンクや画像リンクのエンティティ化解除を一律(必要なものだけですが)に解除してしまっていたので、コード紹介の中にリンクがあった場合なんかはコードではなくリンクや画像が表示されて紹介になっていなかったという事が起こっていたわけです。
そこでコードとして紹介している部分のリンクや画像リンクが記載されている場合はHTMLエンティティ化を解除しないように改良をしようと・・・。
コード紹介部分は<code>で記載しているので

1.<code>~</code>を特定
2.「1」以外を対象にHTMLエンティティ化解除
という風になります。
それを以下の方法でやろうとしわけですが
1.mb_strposでcodeの開始部分と終了部分を特定。
2.次にそこを起点にcodeとそうで無い部分に分割。
3.code以外の分割部分のみHTMLエンティティ化解除。
4.分割部分をくっつけて元通り。

実際に組んでみたら、脳みそが溶けそうになりました。
というかこの方法はよくないと思い断念しました。
理由は「いくらなんでもこれはスマートじゃね~だろ」ってことと、「文字コードの関係でかならずしも正確にぶった切れない事が・・・」ということによります。
さらに正規表現に明るくないことも手伝って断念。
むしろcode内に記載する際の手順を変えたほうが手っ取り早いことに気づき結局はDBに収めたデータを少し修正しただけで片がついてしまいました。
解決の手段は一つではないわけですが、一人でやってるとなかなか気づかない事もあるので要注意ですね。
それにしても正規表現の強力さには改めて驚かされました。
色々なサンプルを見たり試したりしたんですが、これ考えた人とか凄いな~と。
こんかいの修正箇所とは関係ない所で使えそうな正規表現とかあったのでそっちに使って見たりして、その度に「お~すげ~」とか一人で言ってました。
これで記事を書くにあたっての心配要因はだいたい消えたので、今度こそ本当にセキュリティ関連を書いていけそうです。


ブログ  

  • コメント
  • コメントはまだありません