4images Forum & Community
General / Allgemeines => Programming => Topic started by: Sunny C. on October 30, 2011, 05:12:49 PM
-
Ich habe folgendes Problem:
Das CSRF verhindert bei mir die Validierung der Webseite.
In der csrf_utils.php findet man folgenden Eintrag:
function csrf_ob_handler($buffer, $flags) {
if (preg_match('/<html/i', $buffer)) {
$buffer = preg_replace('#(<form[^>]*method\s*=\s*["\']post["\'][^>]*>)#i', '$1' . csrf_form_input(), $buffer);
}
return $buffer;
}
function csrf_form_input() {
global $csrf_protection_name, $csrf_protection_xhtml;
$token = csrf_token();
$endslash = $csrf_protection_xhtml ? ' /' : '';
return "<input type=\"hidden\" name=\"$csrf_protection_name\" value=\"$token\"$endslash>\n";
}
Das bedeutet, dass das "Input- Feld" direkt in der "<form ..." geschrieben wird. Das ist genau mein Problem, das darf in diesem Fall nicht passieren.
In diesem Fall betrifft es nur die Suche.
Meine Suche ist so aufgebaut:
<div id="header">
<div id="search">
<form method="post" action="{url_search}">
<div class="searchContainer">
<input type="text" tabindex="1" id="searchInput" class="inputText" name="search_keywords" value="Suchbegriffe eingeben" />
<script type="text/javascript">
//<![CDATA[
document.getElementById('searchInput').setAttribute('autocomplete', 'off');
document.getElementById('searchInput').onfocus = function() { if (this.value == 'Suchbegriffe eingeben') this.value=''; };
document.getElementById('searchInput').onblur = function() { if (this.value == '') this.value = 'Suchbegriffe eingeben'; };
document.getElementById('searchSubmit').ondblclick = function() { window.location = 'index.php?form=Search'; };
popupMenuList.register("searchInput");
//]]>
</script>
<div class="searchInputMenu">
In diesem Fall muss das csrf- input unter diesem <div> angebracht werden:
<div class="searchContainer">
Ich nutze XHTML 1.1
Wie kann ich das Problem beheben?
----
I have the following problem:
The CSRF prevents me from validating the website.
In csrf_utils.php find the following entry:
function csrf_ob_handler($buffer, $flags) {
if (preg_match('/<html/i', $buffer)) {
$buffer = preg_replace('#(<form[^>]*method\s*=\s*["\']post["\'][^>]*>)#i', '$1' . csrf_form_input(), $buffer);
}
return $buffer;
}
function csrf_form_input() {
global $csrf_protection_name, $csrf_protection_xhtml;
$token = csrf_token();
$endslash = $csrf_protection_xhtml ? ' /' : '';
return "<input type=\"hidden\" name=\"$csrf_protection_name\" value=\"$token\"$endslash>\n";
}
This means that the "input field" directly into the "<form ..." is written. That is exactly my problem, which may not happen in this case.
In this case, it only affects the search
My search is structured as follows
<div id="header">
<div id="search">
<form method="post" action="{url_search}">
<div class="searchContainer">
<input type="text" tabindex="1" id="searchInput" class="inputText" name="search_keywords" value="Suchbegriffe eingeben" />
<script type="text/javascript">
//<![CDATA[
document.getElementById('searchInput').setAttribute('autocomplete', 'off');
document.getElementById('searchInput').onfocus = function() { if (this.value == 'Suchbegriffe eingeben') this.value=''; };
document.getElementById('searchInput').onblur = function() { if (this.value == '') this.value = 'Suchbegriffe eingeben'; };
document.getElementById('searchSubmit').ondblclick = function() { window.location = 'index.php?form=Search'; };
popupMenuList.register("searchInput");
//]]>
</script>
<div class="searchInputMenu">
In this case, the "csrf-input" located under this <div>:
<div class="searchContainer">
I use XHTML 1.1
How can I fix this problem?
-
Hi!
...
Das CSRF verhindert bei mir die Validierung der Webseite.
....Das bedeutet, dass das "Input- Feld" direkt in der "<form ..." geschrieben wird. Das ist genau mein Problem, das darf in diesem Fall nicht passieren.
...
Ich nutze XHTML 1.1
Wie kann ich das Problem beheben?
.....
das was du gepostet hast ist kein XHTML, abgesehn davon könntest du das "<div class="searchContainer">" vor "<input type=\"hidden\" name=\"$csrf_protection_name\" value=\"$token\"$endslash>\n" stellen.
aber dann mußt du bei allen Forms die gleiche Class verwenden.
-
Wie kein XHTML? Wie kommst du darauf?
Meine Webseite basiert auf XHTML 1.1 und ist nur auf Grund des csrf nicht valide (Siehe Anhang)
Und ich kann "<div class="searchContainer">" nicht einfach davor setzen, dann würde es das Layout an anderen Stellen sprengen. Ich muss doch meine Seite valide bekommen auch mit dem CSRF, kann ja nicht sein das 4images da Steine in dem Weg legt
-
....Meine Webseite basiert auf XHTML 1.1 und ist nur auf Grund des csrf nicht valide (Siehe Anhang)
Und ich kann "<div class="searchContainer">" nicht einfach davor setzen, dann würde es das Layout an anderen Stellen sprengen. Ich muss doch meine Seite valide bekommen auch mit dem CSRF, kann ja nicht sein das 4images da Steine in dem Weg legt
du brauchst das ""<input type=\"hidden\" name=\"$csrf_protection_name\" value=\"$token\"$endslash>\n" doch nur zwischen einen Blockelement setzen.
Da zerschiesst es dir doch gar nichts.
-
Es wird doch generell automatisch nach "<form ....>" ausgegeben oder nicht?
Wie soll ich das woanders hinsetzen können?
Wenn ich "<div class="searchContainer">" vor dem hier setze "<input type=\"hidden\" name=\"$csrf_protection_name\" value=\"$token\"$endslash>\n", dann würde es durch das "class"searchContainer" an anderen Stellen das Design zerschießen!
<form ist doch auch ein Block element...
Wenn ich das so abändere:
<div><input type=\"hidden\" name=\"$csrf_protection_name\" value=\"$token\"$endslash>\n</div>
Dann ist es valide. Das verstehe ich gerade nicht so ganz
-
.....
<form ist doch auch ein Block element...
Wenn ich das so abändere:
<div><input type=\"hidden\" name=\"$csrf_protection_name\" value=\"$token\"$endslash>\n</div>
Dann ist es valide. Das verstehe ich gerade nicht so ganz
..
von den rede ich ja:
du brauchst das ""<input type=\"hidden\" name=\"$csrf_protection_name\" value=\"$token\"$endslash>\n" doch nur zwischen einen Blockelement setzen.
-
Aber warum muss ich das beispielsweise extra in einem DIV packen?
-
guggst du (http://www.traum-projekt.com/forum/34-html-and-css/113226-doctype-xhtml-strict-inputfelder-formular.html)
-
Danke dir, mit Fieldset ist es auch besser!
-
ja das hatte ich seinerzeit bei meiner alten Webseite auch gemacht, bspl. aus der contactmail_form.html:
<h4>Sollten sie fragen zu eines der Bilder haben,</h4>
<h4>können Sie hier mit mir in Kontakt treten.</h4>
<br>
<h4>W.A.Rumpf</h4>
<FORM style="margin:30px 0px 0px 0px;"name="inputform" action="{url_contact}" METHOD="POST">
<fieldset>
<legend> </legend>
<label for="sender_name" class="inputform">Ihr Name:</label>
<input style="margin:5px 5px 10px 0px"id="sender_name" name="sender_name" type="text" tabindex="1" value="{sender_name}" size="39" maxlength="50">
<br style="clear:both">
<label for="sender_email" class="inputform">Ihre Email:</label>
<input style="margin:5px 5px 10px 0px"id="sender_email" name="sender_email" type="text" tabindex="2" value="{sender_email}" size="39" maxlength="50">
<br style="clear:both">
<label for="subject" class="inputform">{lang_subject}</label>
<input style="margin:5px 5px 10px 0px"id="subject" name="subject" type="text" tabindex="3" value="{subject}" size="39" maxlength="50">
<br style="clear:both">
<label for="message" class="inputform">{lang_message}</label>
<textarea style="margin:5px 5px 10px 0px" id="message" name="message" cols="61" rows="10" tabindex="4">{message}</textarea>
<br style="clear:both">
{if captcha_contact}
<label class="inputform"> </label>
<a href="javascript:new_captcha_image();"><img src="{url_captcha_image}" id="captcha_image" style="margin:5px 5px 10px 0px;border:none;" alt="captcha_image"></a>
<br style="clear:both">
<label for="captcha_input"class="inputform">{lang_captcha}</label>
<input style="margin:4px 0px 0px 0px"id="captcha_input"type="text" name="captcha" size="39" tabindex="5">
<br style="clear:both">
<label class="inputform"> </label>
<div style="float:left">{lang_captcha_desc}</div>
<br style="clear:both">
{endif captcha_contact}
</fieldset>
<div style="margin-left:155px">
<input type="hidden" name="action" value="emailSiteOwner">
<input type="hidden" name="user_id" value="{user_id}">
<button class= "b" tabindex="5" type="submit" name="postbutton">{lang_submit}</button>
<button tabindex="6" type="reset" name="reset">{lang_reset}</button>
</div>
</form>
<br>
<br>