General / Allgemeines > Programming

csrf verhindert xhtml validierung / csrf prevents xhtml validation

(1/2) > >>

Sunny C.:
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:

--- Code: ---      <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">
--- End code ---
In diesem Fall muss das csrf- input unter diesem <div> angebracht werden:

--- Code: ---<div class="searchContainer">
--- End code ---

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


--- Code: ---      <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">
--- End code ---
In this case, the "csrf-input" located under this <div>:

--- Code: ---<div class="searchContainer">
--- End code ---

I use XHTML 1.1
How can I fix this problem?

Rembrandt:
Hi!

--- Quote from: Sumale.nin on October 30, 2011, 05:12:49 PM ---...
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?
.....
--- End quote ---

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.

Sunny C.:
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

Rembrandt:

--- Quote from: Sumale.nin on October 30, 2011, 05:42:13 PM ---....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


--- End quote ---
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.

Sunny C.:
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


Navigation

[0] Message Index

[#] Next page

Go to full version