Welcome to 2019
[ikiwiki.git] / doc / todo / __42__forward__42__ing_functionality_for_the_meta_plugin.mdwn
1 Here is a patch [[!tag patch]] to add a *forward*ing functionality
2 to the [[`meta`_plugin|plugins/meta]].
3
4 > [[done]], with some changes --[[Joey]]
5
6 I can't use `scrub(...)`, as that will strip out the forwarding HTML command.
7 How to deal with that?
8
9 I can also submit a Git patch, if desired.
10
11
12 # Syntax
13
14 **URL** = http://some.nice/place/ (*etc.*)
15
16 **WHITHER** = \[\[**[[ikiwiki/wikilink]]**]] | **URL**
17
18 **D** = natural number (*meaning seconds*)
19
20 **OPT_DELAY** = delay=**D** | empty (*immediatelly*)
21
22 \[[!meta forward="**WHITHER**" **OPT_DELAY**]]
23
24
25 # Extensions and Ideas
26
27 It might be doable to add references to pages that refer to the page containg
28 the forwarding statement also to the referred-to page.
29
30 --[[tschwinge]]
31
32
33 # Discussion
34
35 > The html scrubber cannot scrub meta headers. So if you emit one
36 > containing user-supplied data, it's up to you to scrub it to avoid all
37 > possible XSS attacks. Two attacks I'd worry about are cyclic meta refresh
38 > loops, which some, but not all web browsers detect and break, and any way
39 > to insert javascript via the user-supplied parameters. (Ie, putting
40 > something in the delay value that closes the tag can probably insert
41 > javascript ATM; and are there ways to embed javascript in the url?)
42 > --[[Joey]]
43
44 >> OK.  I can add code to make sure that `$delay` **D** indeed is a natural number
45 >> and that the passed target address **WHITHER** is nothing but a valid target address.
46 >> (How to qualify a valid target address?)
47 >> What is a *cyclic meta refresh loop*?  Two pages in turn forwarding to each other?
48 >> I think it would be possible to implement such a guard when only in-wiki links
49 >> ([[ikiwiki/wikilink]]s) are being used, but how to do so for external links?  --[[tschwinge]]
50
51 >>> This seems a lot more securely to do for in-wiki links, since we know
52 >>> that a link generated by a wikilink is safe, and can avoid cycles.
53 >>> Obviously there's no way to avoid cycles when using external links.
54 >>> 
55 >>> An example of code that doesn't detect such cycles is LWP::UserAgent,
56 >>> which will happily follow cycles forever. There's a LWPx::ParanoidAgent
57 >>> that can deal with cycles. I suppose this could be considered a client
58 >>> side issue, except that if I were going to turn this redirect feature
59 >>> on in my wikis, I'd really prefer to not have to worry about my wiki
60 >>> causing such problems for clients. I feel it makes sense to make
61 >>> external redirects or other potentially unsafe things an option,
62 >>> and have the default behavior be only things that are known to be
63 >>> secure.
64 >>>
65 >>> I haven't checked if there's a way to embed javascript in meta refresh
66 >>> links or not. Given all the other places I've seen it be embedded, I'll
67 >>> assume it is possible until it's shown not to be though.. --[[Joey]]