{"id":2565,"date":"2014-03-19T20:30:23","date_gmt":"2014-03-19T19:30:23","guid":{"rendered":"https:\/\/sgaul.de\/?p=2565"},"modified":"2014-03-19T20:30:23","modified_gmt":"2014-03-19T19:30:23","slug":"rails-4-schuetzt-nutzer-vor-regex-schwachstellen","status":"publish","type":"post","link":"https:\/\/sgaul.de\/2014\/03\/19\/rails-4-schuetzt-nutzer-vor-regex-schwachstellen\/","title":{"rendered":"Rails 4 sch\u00fctzt Nutzer vor Regex-Schwachstellen"},"content":{"rendered":"
Rails 4 warnt seine Nutzer vor einer weit verbreiteten Sicherheitsl\u00fccke, die durch falsche Anwendung von regul\u00e4ren Ausdr\u00fccken auftritt. So sind Validatoren wie der folgende nicht mehr erlaubt:<\/p>\n
validates :phone, format: { with: \/^[0-9]+$\/ }<\/pre>\nDies wirft einen Argument-Error wie diesen:<\/p>\n
`check_options_validity': The provided regular expression\r\n is using multiline anchors (^ or $), which may present a\r\n security risk. Did you mean to use \\A and \\z, or forgot \r\n to add the :multiline => true option? (ArgumentError)<\/pre>\n<\/p>\n
Hintergrund ist, dass regul\u00e4re Ausdr\u00fccke in Ruby von Haus aus mehrere Zeilen matchen:<\/p>\n
\"0123456789\" =~ \/^[0-9]+$\/\r\n => 0\r\n \r\n \"0123456789<script>alert('42!');<\/script>\" =~ \/^[0-9]+$\/\r\n => nil\r\n \r\n # aber:\r\n\r\n \"0123456789\\n<script>alert('42!');<\/script>\" =~ \/^[0-9]+$\/\r\n => 0<\/pre>\nDie Begrenzer
^<\/code> und
$<\/code> matchen hier Zeilenanfang und -ende. In aller Regel will man jedoch Anfang und Ende des Gesamtstrings adressieren, wozu Ruby
\\A<\/code> und
\\z<\/code> bereitstellt:<\/p>\n
\"0123456789\" =~ \/\\A[0-9]+\\z\/\r\n => 0 \r\n \r\n \"0123456789\\n<script>alert('42!');<\/script>\" =~ \/\\A[0-9]+\\z\/\r\n => nil<\/pre>\nMit diesem Ausdruck l\u00e4uft der obige Validator fehlerfrei durch.<\/p>\n
Will man wirklich einzelne Zeilen validieren, kann man die obige Fehlermeldung mit der Option
multiline: true<\/code> deaktivieren.<\/p>\n","protected":false},"excerpt":{"rendered":"
Rails 4 warnt seine Nutzer vor einer weit verbreiteten Sicherheitsl\u00fccke, die durch falsche Anwendung von regul\u00e4ren Ausdr\u00fccken auftritt. So sind Validatoren wie der folgende nicht mehr erlaubt: validates :phone, format: { with: \/^[0-9]+$\/ } Dies wirft einen Argument-Error wie diesen: `check_options_validity‘: The provided regular expression is using multiline anchors (^ or $), which may present… Rails 4 sch\u00fctzt Nutzer vor Regex-Schwachstellen<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[91],"tags":[527,553,274,275,276,552],"_links":{"self":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/2565"}],"collection":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/comments?post=2565"}],"version-history":[{"count":5,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/2565\/revisions"}],"predecessor-version":[{"id":2570,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/2565\/revisions\/2570"}],"wp:attachment":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/media?parent=2565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/categories?post=2565"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/tags?post=2565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}