* :ref:`http.accept_enc`
* :ref:`http.referer`
* :ref:`file.name`
+ * :ref:`urilen`
Response Keywords:
* :ref:`http.stat_msg`
urilen
------
-The ``urilen`` keyword is used to match on the length of the request
+The ``urilen`` keyword is used to match on the length of the normalized request
URI. It is possible to use the ``<`` and ``>`` operators, which
-indicate respectively *smaller than* and *larger than*.
+indicate respectively *less than* and *larger than*.
urilen uses an :ref:`unsigned 64-bit integer <rules-integer-keywords>`.
-The format of ``urilen`` is::
+The ``urilen`` keyword does not require a content match on the :ref:`http.uri`
+buffer or the :ref:`http.uri.raw` buffer.
- urilen:3;
+Example HTTP Request::
-Other possibilities are::
+ GET /index.html HTTP/1.1
+ User-Agent: Mozilla/5.0
+ Host: suricata.io
- urilen:1;
- urilen:>1;
- urilen:<10;
- urilen:10<>20; (bigger than 10, smaller than 20)
+.. container:: example-rule
-Example:
+ alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"HTTP Request"; \
+ flow:established,to_server; :example-rule-options:`urilen:11;` \
+ http.method; content:"GET"; classtype:bad-unknown; sid:40; rev:1;)
+The above signature would match on any HTTP GET request that has a URI
+length of 11, regardless of the content or structure of the URI.
-Example of ``urilen`` in a signature:
+The following signatures would all alert on the example request above as well
+and show the different ``urilen`` options.
.. container:: example-rule
- alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"ET TROJAN Possible Vundo Trojan Variant reporting to Controller"; flow:established,to_server; content:"POST "; depth:5; uricontent:"/frame.html?"; :example-rule-emphasis:`urilen: > 80;` classtype:trojan-activity; reference:url,doc.emergingthreats.net/2009173; reference:url,www.emergingthreats.net/cgi-bin/cvsweb.cgi/sigs/VIRUS/TROJAN_Vundo; sid:2009173; rev:2;)
+ alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"urilen greater than 10"; \
+ flow:established,to_server; :example-rule-options:`urilen:>10;` \
+ classtype:bad-unknown; sid:41; rev:1;)
+
+ alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"urilen less than 12"; \
+ flow:established,to_server; :example-rule-options:`urilen:<12;` \
+ classtype:bad-unknown; sid:42; rev:1;)
-You can also append ``norm`` or ``raw`` to define what sort of buffer you want
-to use (normalized or raw buffer).
+ alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"urilen greater/less than \
+ example"; flow:established,to_server; :example-rule-options:`urilen:10<>12;` \
+ classtype:bad-unknown; sid:43; rev:1;)
.. _http.protocol: