]> source.dussan.org Git - rspamd.git/commitdiff
Add `R_SUSPICIOUS_IMAGES` rule.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 13 Oct 2015 11:51:23 +0000 (12:51 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 13 Oct 2015 11:51:23 +0000 (12:51 +0100)
rules/html.lua

index ffa7dd917f6c61b9258d1f1cbf5c5eee442f594e..1cc338491ff90791d71d9397b9c2ad13fef07364 100644 (file)
@@ -96,4 +96,48 @@ rspamd_config.R_EMPTY_IMAGE = {
   score = 2.0,
   group = 'html',
   description = 'Message contains empty parts and image'
+}
+
+rspamd_config.R_SUSPICIOUS_IMAGES = {
+  callback = function(task)
+    local tp = task:get_text_parts() -- get text parts in a message
+
+    for _, p in ipairs(tp) do
+      local h = p:get_html()
+
+      if h then
+        local l = p:get_words_count()
+        local img = h:get_images()
+        local pic_words = 0
+
+        if img then
+          for _, i in ipairs(img) do
+            if i['embedded'] then
+              local dim = i['width'] + i['height']
+
+              -- do not trigger on small and large images
+              if dim > 100 and dim < 3000 then
+                -- We assume that a single picture 100x200 contains approx 3 words of text
+                pic_words = pic_words + dim / 100
+              end
+            end
+          end
+        end
+
+        if l + pic_words > 0 then
+          local rel = pic_words / (l + pic_words)
+
+          if rel > 0.5 then
+            return true, (rel - 0.5) * 2
+          end
+        end
+      end
+    end
+
+    return false
+  end,
+
+  score = 5.0,
+  group = 'html',
+  description = 'Message contains many suspicious messages'
 }
\ No newline at end of file