Rechnungen: Betraege mit Tausenderpunkt, XSS in Templates und Suche

- formularZahl(): steht ein Komma im Betrag, sind Punkte Tausendertrenner
  ("1.234,50" -> 1234.50, vorher 1.23); ohne Komma bleibt der Punkt
  Dezimaltrenner wie bei der Artikel-Autovervollstaendigung ("12.50").
- Rechnungs-Templates (addrechnung, mailrechnung, changeadr, copyrech,
  umschlagshow, rechshow) geben alle Daten mit |escape aus; Werte aus der
  URL (id, type, newtype) als int.
- Rechnungssuche: Artikelnamen werden escaped statt als HTML ausgegeben
  (Trennung per Zeilenumbruch in SQL, artikelListeHtml() in PHP).
- Suchbegriffe kommen per encodeURIComponent als UTF-8, utf8_encode()
  entfaellt; vorher gingen Zeichen ausserhalb von Latin-1 verloren.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-17 11:18:29 +02:00
co-authored by Claude Opus 5
parent d8fff4aeb6
commit b76d883fbe
12 changed files with 219 additions and 206 deletions
+32 -32
View File
@@ -15,11 +15,11 @@
{elseif $type == 5}
{$typename="Brief"}
{/if}
<h2>{$typename} {$headstr}:</h2>
<form action="?action=rechnungadd&mailformsent=1&mail=1&id={$smarty.get.id}" name="mainform" id='rechnform' method='POST'>
<h2>{$typename|escape} {$headstr|escape}:</h2>
<form action="?action=rechnungadd&mailformsent=1&mail=1&id={$smarty.get.id|intval}" name="mainform" id='rechnform' method='POST'>
<fieldset class='nolim'>
<legend>{$typename} an <a href="?action=kundenshow&id={$adresse.partner_id}">Kunde {$adresse.partner_id}</a></legend>
<legend>{$typename|escape} an <a href="?action=kundenshow&id={$adresse.partner_id|escape}">Kunde {$adresse.partner_id|escape}</a></legend>
<p>
<br />
@@ -28,9 +28,9 @@
{html_options values=$mails output=$mails}
</select><br />
<label>Betreff:</label>
<input value='{$smarty.session.firma}: anbei das von Ihnen gewünschte Dokument' id='sub' maxlength='150' name='sub' /><br />
<input value='{$smarty.session.firma|escape}: anbei das von Ihnen gewünschte Dokument' id='sub' maxlength='150' name='sub' /><br />
<label>Anrede:</label>
{if $anrs.{$adresse.anrede_id} == "Herrn" || $anrs.{$adresse.anrede_id} == "Herr"}
{if $anrs.{$adresse.anrede_id|escape} == "Herrn" || $anrs.{$adresse.anrede_id|escape} == "Herr"}
{strip}
<input value='
{if $rechnung.anr1}
@@ -38,16 +38,16 @@
{else}
Sehr geehrter Herr{" "}
{if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "}
{$titels.{$adresse.titel_id}|escape}{" "}
{/if}
{if $adresse.vname}
{$adresse.vname}{" "}
{$adresse.vname|escape}{" "}
{/if}
{$adresse.nname},
{$adresse.nname|escape},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede2_id} == "Herrn" || $anrs.{$adresse.anrede_id} == "Herr"}
{elseif $anrs.{$adresse.anrede2_id|escape} == "Herrn" || $anrs.{$adresse.anrede_id|escape} == "Herr"}
{strip}
<input value='
{if $rechnung.anr1}
@@ -55,16 +55,16 @@
{else}
Sehr geehrter Herr{" "}
{if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "}
{$titels.{$adresse.titel2_id}|escape}{" "}
{/if}
{if $adresse.vname2}
{$adresse.vname2}{" "}
{$adresse.vname2|escape}{" "}
{/if}
{$adresse.nname2},
{$adresse.nname2|escape},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede_id} == "Frau"}
{elseif $anrs.{$adresse.anrede_id|escape} == "Frau"}
{strip}
<input value='
{if $rechnung.anr1}
@@ -72,16 +72,16 @@
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "}
{$titels.{$adresse.titel_id}|escape}{" "}
{/if}
{if $adresse.vname}
{$adresse.vname}{" "}
{$adresse.vname|escape}{" "}
{/if}
{$adresse.nname},
{$adresse.nname|escape},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede2_id} == "Frau"}
{elseif $anrs.{$adresse.anrede2_id|escape} == "Frau"}
{strip}
<input value='
{if $rechnung.anr1}
@@ -89,12 +89,12 @@
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "}
{$titels.{$adresse.titel2_id}|escape}{" "}
{/if}
{if $adresse.vname2}
{$adresse.vname2}{" "}
{$adresse.vname2|escape}{" "}
{/if}
{$adresse.nname2},
{$adresse.nname2|escape},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
@@ -103,7 +103,7 @@
{/if}
<label>Zweite Anrede:</label>
{if $anrs.{$adresse.anrede_id} == "Frau" && $anrs.{$adresse.anrede2_id} == "Herr" && $anrs.{$adresse.anrede2_id} == "Herrn"}
{if $anrs.{$adresse.anrede_id|escape} == "Frau" && $anrs.{$adresse.anrede2_id|escape} == "Herr" && $anrs.{$adresse.anrede2_id|escape} == "Herrn"}
{strip}
<input value='
{if $rechnung.anr2}
@@ -111,16 +111,16 @@
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "}
{$titels.{$adresse.titel_id}|escape}{" "}
{/if}
{if $adresse.vname}
{$adresse.vname}{" "}
{$adresse.vname|escape}{" "}
{/if}
{$adresse.nname},
{$adresse.nname|escape},
{/if}
' id='anr2' maxlength='150' name='anr2' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede2_id} == "Frau"}
{elseif $anrs.{$adresse.anrede2_id|escape} == "Frau"}
{strip}
<input value='
{if $rechnung.anr2}
@@ -128,12 +128,12 @@
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "}
{$titels.{$adresse.titel2_id}|escape}{" "}
{/if}
{if $adresse.vname2}
{$adresse.vname2}{" "}
{$adresse.vname2|escape}{" "}
{/if}
{$adresse.nname2},
{$adresse.nname2|escape},
{/if}
' id='anr2' maxlength='150' name='anr2' /><br />
{/strip}
@@ -142,11 +142,11 @@
{/if}
<label class='artlabel'>E-Mail Text:</label><br />
<center><textarea name='intro' id='intro' {if $type == 5}class='tinymce'{else}class='bigtextarea'{/if}>
Anbei senden wir Ihnen {if $typename == "Angebot"}das{elseif $typename == "Brief"}den{else}die{/if} geforderte{if $typename == "Brief"}n{/if} {$typename}.
Anbei senden wir Ihnen {if $typename == "Angebot"}das{elseif $typename == "Brief"}den{else}die{/if} geforderte{if $typename == "Brief"}n{/if} {$typename|escape}.
Mit freundlichen Grüßen
{$smarty.session.vname} {$smarty.session.nname}
{$smarty.session.firma}
{$smarty.session.vname|escape} {$smarty.session.nname|escape}
{$smarty.session.firma|escape}
---
Das Dokument ist als PDF-Datei im Anhang hinterlegt.
@@ -169,7 +169,7 @@ http://www.adobe.de/products/acrobat/readstep2.html
<br />
<h2>Anhang:</h2>
<div id="pdfpreview">
<iframe src='{$pdffile}' width='100%' height='600px'></iframe>
<iframe src='{$pdffile|escape}' width='100%' height='600px'></iframe>
</div>
</div>
</div>