dcee94d9ddace5a5abbcf163e3493704bb61b828
bernd webinterface => /webinterface

bernd authored 17 years ago

1) <?php
2) 
3) function output($arg)
4) {
5)   global $output;
6)   $output .= $arg;
7) }
8) 
9) 
10) function random_string($nc, $a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') {
11)     $l=strlen($a)-1; $r='';
12)     while($nc-->0) $r.=$a{mt_rand(0,$l)};
13)     return $r;
14)  }
15) 
16) 
17) function are_you_sure($query_string, $question)
18) {
bernd Neues Jabber-Modul (noch ni...

bernd authored 17 years ago

19)   global $debugmode;
20)   if ($debugmode)
21)     $query_string = 'debug&amp;'.$query_string;
bernd webinterface => /webinterface

bernd authored 17 years ago

22)   $token = random_string(20);
bernd XSRF-kram fixed

bernd authored 17 years ago

23)   $_SESSION['are_you_sure_token'] = $token;
bernd webinterface => /webinterface

bernd authored 17 years ago

24)   output("<form action=\"?{$query_string}\" method=\"post\">\n");
25)   output("<p class=\"confirmation\">{$question}<br />\n");
26)   output("<input type=\"hidden\" name=\"random_token\" value=\"{$token}\" />\n");
bernd </form>

bernd authored 17 years ago

27)   output("<input type=\"submit\" name=\"really\" value=\"Ja\" />\n<input type=\"submit\" name=\"not_really\" value=\"Nein\" /></p>\n");
28)   output("</form>\n");
bernd webinterface => /webinterface

bernd authored 17 years ago

29) }
30) 
31) 
32) function user_is_sure()
33) {
34)   if (isset($_POST['really']))
35)   {
bernd XSRF-kram fixed

bernd authored 17 years ago

36)     if ($_POST['random_token'] == $_SESSION['are_you_sure_token'])
bernd webinterface => /webinterface

bernd authored 17 years ago

37)       return true;
38)     else
39)       system_failure("Possible Cross-site-request-forgery detected!");
40)   }
41)   elseif (isset($_POST['not_really']))
42)     return false;
43)   else
44)     return NULL;
45) }
46) 
47) 
48) 
bernd XSRF-kram fixed

bernd authored 17 years ago

49) function generate_form_token($form_id)
50) {
51)   require_once("inc/debug.php");
52)   $sessid = session_id();
53)   if ($sessid == "") 
54)   {
55)     DEBUG("Uh? Session not running? Wtf?");
bernd Neues Jabber-Modul (noch ni...

bernd authored 17 years ago

56)     system_failure("Internal error!");
bernd XSRF-kram fixed

bernd authored 17 years ago

57)   }
58)   if (! isset($_SESSION['session_token']))
59)     $_SESSION['session_token'] = random_string(10);
bernd Neues Jabber-Modul (noch ni...

bernd authored 17 years ago

60)   $formtoken = hash('sha256', $sessid.$form_id.$_SESSION['session_token']);
bernd XSRF-kram fixed

bernd authored 17 years ago

61)   return '<input type="hidden" name="formtoken" value="'.$formtoken.'" />'."\n";
62) }
63) 
64) 
65) function check_form_token($form_id)
66) {
67)   $formtoken = $_POST['formtoken'];
68)   $sessid = session_id();
69)   if ($sessid == "") 
70)   {
71)     DEBUG("Uh? Session not running? Wtf?");
bernd Neues Jabber-Modul (noch ni...

bernd authored 17 years ago

72)     system_failure("Internal error!");
bernd XSRF-kram fixed

bernd authored 17 years ago

73)   }
74) 
bernd Neues Jabber-Modul (noch ni...

bernd authored 17 years ago

75)   $correct_formtoken = hash('sha256', $sessid.$form_id.$_SESSION['session_token']);
bernd XSRF-kram fixed

bernd authored 17 years ago

76) 
77)   if (! ($formtoken == $correct_formtoken))
78)     system_failure("Possible cross-site-request-forgery!");
79) }
80) 
bernd Neues Jabber-Modul (noch ni...

bernd authored 17 years ago

81) 
82) 
83) function internal_link($file, $label, $querystring = '')
84) {
85)   $debugstr = '';
86)   global $debugmode;
87)   if ($debugmode)
88)     $debugstr = 'debug&amp;';
89)   $querystring = str_replace('&', '&amp;', $querystring);
90) 
91)   return "<a href=\"{$file}?{$debugstr}${querystring}\">{$label}</a>";
92) }
93) 
94) 
95) function html_form($form_id, $scriptname, $querystring, $content)
96) {
97)   $debugstr = '';
98)   global $debugmode;
99)   if ($debugmode)
100)     $debugstr = 'debug&amp;';
101)   $querystring = str_replace('&', '&amp;', $querystring);
102)   $ret = '';
103)   $ret .= '<form action="'.$scriptname.'?'.$debugstr.$querystring.'" method="post">'."\n";
104)   $ret .= generate_form_token($form_id);
105)   $ret .= $content;
106)   $ret .= '</form>';
107)   return $ret;  
108) }
109) 
110) 
111) 
112)