Set Referrer-Policy to no-referrer
Fandom sends a fake 404 to media if there's a Referer header that has an origin that's not Fandom. However, we can choose not to send the header by setting Referrer-Policy. See also: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy
This commit is contained in:
		
							parent
							
								
									ade7878f7b
								
							
						
					
					
						commit
						adc4b47b83
					
				
					 4 changed files with 22 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -9,6 +9,8 @@
 | 
			
		|||
         "url-utils.rkt")
 | 
			
		||||
 | 
			
		||||
(provide
 | 
			
		||||
 ; header to not send referers to fandom
 | 
			
		||||
 referrer-policy
 | 
			
		||||
 ; timeout durations for http-easy requests
 | 
			
		||||
 timeouts
 | 
			
		||||
 ; generates a consistent footer
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +24,7 @@
 | 
			
		|||
  (require rackunit
 | 
			
		||||
           html-writing))
 | 
			
		||||
 | 
			
		||||
(define referrer-policy (header #"Referrer-Policy" #"no-referrer"))
 | 
			
		||||
(define timeouts (easy:make-timeout-config #:lease 5 #:connect 5))
 | 
			
		||||
 | 
			
		||||
(define (application-footer source-url #:license [license-in #f])
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -113,6 +113,7 @@
 | 
			
		|||
      (xexp->html body))
 | 
			
		||||
    (response/output
 | 
			
		||||
     #:code 200
 | 
			
		||||
     #:headers (list referrer-policy)
 | 
			
		||||
     (λ (out)
 | 
			
		||||
       (write-html body out))))))
 | 
			
		||||
(module+ test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,6 +81,7 @@
 | 
			
		|||
      (xexp->html body))
 | 
			
		||||
    (response/output
 | 
			
		||||
     #:code 200
 | 
			
		||||
     #:headers (list referrer-policy)
 | 
			
		||||
     (λ (out)
 | 
			
		||||
       (write-html body out))))))
 | 
			
		||||
(module+ test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -152,15 +152,17 @@
 | 
			
		|||
                       (λ (v) (dict-update v 'rel (λ (s)
 | 
			
		||||
                                                    (list (string-append (car s) " noreferrer")))
 | 
			
		||||
                                           '(""))))
 | 
			
		||||
                ; proxy images from inline styles
 | 
			
		||||
                (curry attribute-maybe-update 'style
 | 
			
		||||
                       (λ (style)
 | 
			
		||||
                         (regexp-replace #rx"url\\(['\"]?(.*?)['\"]?\\)" style
 | 
			
		||||
                                         (λ (whole url)
 | 
			
		||||
                                           (string-append
 | 
			
		||||
                                            "url("
 | 
			
		||||
                                            (u-proxy-url url)
 | 
			
		||||
                                            ")")))))
 | 
			
		||||
                ; proxy images from inline styles, if strict_proxy is set
 | 
			
		||||
                (curry u
 | 
			
		||||
                       (λ (v) (config-true? 'strict_proxy))
 | 
			
		||||
                       (λ (v) (attribute-maybe-update 'style
 | 
			
		||||
                         (λ (style)
 | 
			
		||||
                           (regexp-replace #rx"url\\(['\"]?(.*?)['\"]?\\)" style
 | 
			
		||||
                                           (λ (whole url)
 | 
			
		||||
                                             (string-append
 | 
			
		||||
                                              "url("
 | 
			
		||||
                                              (u-proxy-url url)
 | 
			
		||||
                                              ")")))) v)))
 | 
			
		||||
                ; and also their links, if strict_proxy is set
 | 
			
		||||
                (curry u
 | 
			
		||||
                       (λ (v)
 | 
			
		||||
| 
						 | 
				
			
			@ -168,8 +170,10 @@
 | 
			
		|||
                              (eq? element-type 'a)
 | 
			
		||||
                              (has-class? "image-thumbnail" v)))
 | 
			
		||||
                       (λ (v) (attribute-maybe-update 'href u-proxy-url v)))
 | 
			
		||||
                ; proxy images from src attributes
 | 
			
		||||
                (curry attribute-maybe-update 'src u-proxy-url)
 | 
			
		||||
                ; proxy images from src attributes, if strict_proxy is set
 | 
			
		||||
                (curry u
 | 
			
		||||
                       (λ (v) (config-true? 'strict_proxy))
 | 
			
		||||
                       (λ (v) (attribute-maybe-update 'src u-proxy-url v)))
 | 
			
		||||
                ; don't lazyload images
 | 
			
		||||
                (curry u
 | 
			
		||||
                       (λ (v) (dict-has-key? v 'data-src))
 | 
			
		||||
| 
						 | 
				
			
			@ -276,8 +280,8 @@
 | 
			
		|||
             (define headers (if redirect-msg
 | 
			
		||||
                                 (let* ([dest (get-attribute 'href (bits->attributes ((query-selector (λ (t a c) (eq? t 'a)) redirect-msg))))]
 | 
			
		||||
                                        [value (bytes-append #"0;url=" (string->bytes/utf-8 dest))])
 | 
			
		||||
                                   (list (header #"Refresh" value)))
 | 
			
		||||
                                 (list)))
 | 
			
		||||
                                   (list (header #"Refresh" value) referrer-policy))
 | 
			
		||||
                                 (list referrer-policy)))
 | 
			
		||||
             (when (config-true? 'debug)
 | 
			
		||||
               ; used for its side effects
 | 
			
		||||
               ; convert to string with error checking, error will be raised if xexp is invalid
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue