tag:forum.selfhtml.org,2005:/self Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage – SELFHTML-Forum 2019-03-23T08:44:42Z https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1744495#m1744495 1211chef 2019-03-15T16:04:24Z 2019-03-15T16:11:39Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <p>beschäftige mich grade mit einer webbasierten handyversion, u.a. mit bildupload. lade ich bilder mit meinem eierphone hoch, erscheinen sie korrekt gedreht. schau ich sie mir dann am desktop an oder auf nem android stehen die bilder auf dem kopf oder liegen seitlich.</p> <p>das problem ist jetzt folgendes: ich könnte dem user, zb. mit image::magick eine funktion zur verfügung stellen, mit der er nach dem upload die bilder richtig drehen kann. aber zb. ein eierphone-nutzer sieht gar nicht dass das bild gedreht ist, da das eierphone das intern richtig stellt und ihm die gedrehte version als richtig darstellt.</p> <p>ich frage mich jetzt, ob, wo, wie diese informationen zb. in nem jpg gespeichert werden und wie ich die misere am besten abfangen kann bevor sie entsteht.</p> <p>ich hoffe sehr ihr könnt mir was dazu sagen und wir können das ausdiskutieren.</p> <p>so kann ich das nicht lassen.</p> <p>gruss gust</p> <p>ps: portale wie eba* kleinanzeigen haben das im griff, also muss es auch für mich möglich sein.</p> <p>pps: allen erst mal nen schönes we ::bier::party::fun:: ... ich kuck mir dann am montag eure lösungen an ;D. also schon mal tausend dank für eure hilfe</p> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1744498#m1744498 ursus contionabundo 2019-03-15T16:17:24Z 2019-03-15T16:27:33Z Exif-Daten löschen und eine sehr ernste Warnung <blockquote> <p>ich frage mich jetzt, ob, wo, wie diese informationen zb. in nem jpg gespeichert werden und wie ich die misere am besten abfangen kann bevor sie entsteht.</p> </blockquote> <p>Exif-Daten: Was das ist:</p> <p><a href="https://de.wikipedia.org/wiki/Exchangeable_Image_File_Format" rel="nofollow noopener noreferrer">https://de.wikipedia.org/wiki/Exchangeable_Image_File_Format</a></p> <p>Wie man die löscht erfährst Du bei der Suchmaschine Deines am wenigsten unerhörten Misstrauens.</p> <blockquote> <p>beschäftige mich grade mit einer webbasierten handyversion, u.a. mit bildupload.</p> </blockquote> <p>Wenn Dir die Poblematik der Exif-Daten nicht bekannt ist, dann fürchte ich ganz übles. <a href="https://wiki.selfhtml.org/wiki/PHP/Tutorials/File_Upload" rel="nofollow noopener noreferrer">Einen "Bildupload" sollte kein Anfänger machen</a>, da versagen ganz andere und bauen Sicherheitslöcher ein, die so groß wie ein Universum sind.</p> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1744551#m1744551 pl 2019-03-17T05:57:44Z 2019-03-17T05:57:44Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <blockquote> <p>ich kuck mir dann am montag eure lösungen an</p> </blockquote> <p>Kennst Du schon CPAN? Solltest Du mal kuckn echt der Knaller!</p> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1744582#m1744582 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2019-03-17T10:36:57Z 2019-03-18T07:50:07Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <p>@@1211chef</p> <blockquote> <p lang="en">die bilder richtig drehen</p> </blockquote> <p>slightly related: <a href="https://xkcd.com/2119/" rel="nofollow noopener noreferrer">XKCD</a> </p> <p>LLAP </p> <div class="signature">-- <br> <em>„Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“</em> —Kurt Weidemann </div> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1744678#m1744678 Christian Kruse https://wwwtech.de/about 2019-03-18T07:38:56Z 2019-03-20T15:19:18Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <p>Hallo 1211chef,</p> <p>ein funktionierendes Vorgehen ist: ImageMagicks <code>convert</code> mit <code>-auto-orient</code> das Bild richtig drehen lassen und mit <code>-strip</code> die EXIF-Daten zu entfernen.</p> <p>So wird das Bild in jedem Gerät gleich dargestellt, und, sofern die EXIF-Daten nicht lügen, auch in der richtigen Orientierung.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1744931#m1744931 1211chef 2019-03-20T11:37:59Z 2019-03-20T11:37:59Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <p>hallo, erst mal danke für die vielen anregungen (und warnungen).</p> <p>ich hatte mich mit der sicherheitsproblematik schon mal befasst, ist aber lange her. mit meinem kenntnissen werde ich das nicht 100%tig in den griff bekommen. wobei das leben generell nie risikofrei ist ;D</p> <p>ich muss mir das alte perl script nochmal genau durcharbeiten. habe damals File:Type verwendet, vorprüfungen gemacht, den dateinamen ersetzt, die dateirechte auf 664 gesetzt, an die finale stelle verschoben und die temp gelöscht.</p> <p>mit Exif-Daten hab ich mich damals nicht beschäftigt (wie man sieht).</p> <p>den aktuellen uploadbereich will ich in einer passwortgeschützten umgebung einsetzen und es haben nur wenige leute darauf zugriff, die ich auch alle persönlich kenne. das risiko sollte dadurch schon mal etwas minimiert sein.</p> <p>trotz allem werde ich natürlich versuchen die sache einigermaßen sicher zu machen.</p> <p>was sagt ihr zum perl modul File::Type und meiner vorgehensweise? was kann ich besser machen in sachen risikoprüfung?</p> <p>gruss gust</p> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1744550#m1744550 ursus contionabundo 2019-03-17T00:22:20Z 2019-03-17T00:24:45Z Exif-Daten löschen und eine sehr ernste Warnung <p>Die Vorgehensweise ist in PHP und Perl identisch. Nur die Funktionen heißen anders.</p> <p>1. Die folgenden PHP-Funktionen sorgen dafür, dass wirklich Grafiken des angegeben Typs geladen werden:</p> <ul> <li>imagecreatefromgif() → imagecopyresized() → imagegif()</li> <li>imagecreatefrompng() → imagecopyresized() → imagepng()</li> <li>imagecreatefromjpeg() → imagecopyresized() → imagejpeg()</li> </ul> <p>2. Du kannst also zugleich das Bild in Originalgröße, bestimmte Größen sowie eventuell gewünschte Thumbnails erzeugen. Wenn das nicht klappt, dann war es kein Bild…</p> <p>3. Dabei werden auch die störenden bzw. die Privatsphäre schädigenden Exif-Daten gelöscht. Also auch die Angaben zur Rotation.</p> <p>4. Vergiss nicht, dass Du stets den Dateiname bestimmst. <code>md5( $Originaldaten )</code> ist eine Möglichkeit.</p> <p>5. Lösche nach dem Kopieren den Upload aus dem Temp-Verzeichnis.</p> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1744940#m1744940 1211chef 2019-03-20T16:02:37Z 2019-03-20T16:06:20Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <blockquote> <p>Hallo 1211chef,</p> <p>ein funktionierendes Vorgehen ist: ImageMagicks <code>convert</code> mit <code>-auto-orient</code> das Bild richtig drehen lassen und mit <code>-strip</code> die EXIF-Daten zu entfernen.</p> <p>So wird das Bild in jedem Gerät gleich dargestellt, und, sofern die EXIF-Daten nicht lügen, auch in der richtigen Orientierung.</p> <p>LG,<br> CK</p> </blockquote> <p>hallo christian, yepp, passt ::thumbsUP:: deine tipps sind immer wieder hervorragend! das ganze sieht in perl jetz mal auszugsweise in der testvers. so aus.</p> <p>was kann ich noch zum thema fileprüfung besser/sicherer machen?</p> <pre><code class="block language-perl"> <span class="token comment">#!/usr/bin/perl</span> <span class="token keyword">use</span> <span class="token punctuation">[</span>allerhandzeugs<span class="token punctuation">]</span> <span class="token keyword">use</span> File<span class="token punctuation">:</span><span class="token punctuation">:</span>Type<span class="token punctuation">;</span> <span class="token keyword">use</span> Image<span class="token punctuation">:</span><span class="token punctuation">:</span>Magick<span class="token punctuation">;</span> <span class="token keyword">my</span> $<span class="token string">q = new CGI; my $ft =</span> File<span class="token punctuation">:</span><span class="token punctuation">:</span>Type<span class="token operator">-></span>new<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$img</span> <span class="token operator">=</span> Image<span class="token punctuation">:</span><span class="token punctuation">:</span>Magick<span class="token operator">-></span>new<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$ID</span> <span class="token operator">=</span> $<span class="token string">q->param ("ID"); my $machwas = $q-</span><span class="token operator">></span>param <span class="token punctuation">(</span><span class="token string">"machwas"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$fname</span> <span class="token operator">=</span> $<span class="token string">q->param ("upload"); my $handle = $q-</span><span class="token operator">></span>upload <span class="token punctuation">(</span><span class="token string">"upload"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$machwas</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$fname</span> <span class="token operator">=</span> <span class="token operator">~</span><span class="token regex">s/(?:\\|\/)([^\\\/]+)$/$1/g</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token punctuation">(</span><span class="token variable">$a</span><span class="token punctuation">,</span><span class="token variable">$end</span><span class="token punctuation">)</span> <span class="token operator">=</span> split<span class="token punctuation">(</span><span class="token regex">/\.$+/</span><span class="token punctuation">,</span> <span class="token variable">$fname</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$end</span> <span class="token operator">=</span> lc<span class="token punctuation">(</span><span class="token variable">$end</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$fname</span> <span class="token operator">=</span> <span class="token variable">$ID</span><span class="token operator">.</span>time<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token string">"."</span><span class="token operator">.</span><span class="token variable">$end</span><span class="token punctuation">;</span> open <span class="token punctuation">(</span>FILE<span class="token punctuation">,</span> <span class="token string">">../../pics/$fname"</span><span class="token punctuation">)</span> <span class="token operator">or</span> <span class="token keyword">die</span> <span class="token string">"Can't create file: $!"</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$buffer</span><span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">(</span>read<span class="token punctuation">(</span><span class="token variable">$handle</span><span class="token punctuation">,</span><span class="token variable">$buffer</span><span class="token punctuation">,</span><span class="token number">2048</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">print</span> FILE <span class="token variable">$buffer</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> close <span class="token punctuation">(</span>FILE<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$type</span> <span class="token operator">=</span> <span class="token variable">$ft</span><span class="token operator">-></span>mime_type<span class="token punctuation">(</span><span class="token string">"../../pics/$fname"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$gr</span> <span class="token operator">=</span> <span class="token operator">-s</span><span class="token punctuation">(</span><span class="token string">"../../pics/$fname"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span><span class="token variable">$type</span> <span class="token operator">ne</span> <span class="token string">"image/jpeg"</span><span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token variable">$type</span> <span class="token operator">ne</span> <span class="token string">"image/png"</span><span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token variable">$type</span> <span class="token operator">ne</span> <span class="token string">"image/x-png"</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">print</span> header<span class="token punctuation">(</span><span class="token string">'text/plain'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">print</span><span class="token string">"L-In Error :: falsches Dateiformat $type"</span><span class="token punctuation">;</span> unlink<span class="token punctuation">(</span><span class="token string">"../../pics/$fname"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">goto</span> end<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$img</span><span class="token operator">-></span>Read<span class="token punctuation">(</span><span class="token string">"../../pics/$fname"</span><span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token keyword">die</span> <span class="token string">"Cannot read $fname!"</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token punctuation">(</span><span class="token variable">$wo</span><span class="token punctuation">,</span><span class="token variable">$ho</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token variable">$img</span><span class="token operator">-></span>Get<span class="token punctuation">(</span><span class="token string">'width'</span><span class="token punctuation">,</span><span class="token string">'height'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$max</span> <span class="token operator">=</span> <span class="token number">600</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$wn</span> <span class="token operator">=</span> <span class="token variable">$wo</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$hn</span> <span class="token operator">=</span> <span class="token variable">$ho</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$ratio</span> <span class="token operator">=</span> <span class="token variable">$wo</span><span class="token operator">/</span><span class="token variable">$ho</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span><span class="token variable">$wo</span> <span class="token operator">></span> <span class="token variable">$max</span><span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token punctuation">(</span><span class="token variable">$ho</span> <span class="token operator">></span> <span class="token variable">$max</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$ratio</span> <span class="token operator">></span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$wn</span> <span class="token operator">=</span> <span class="token variable">$max</span><span class="token punctuation">;</span> <span class="token variable">$hn</span> <span class="token operator">=</span> int<span class="token punctuation">(</span><span class="token variable">$max</span> <span class="token operator">/</span> <span class="token variable">$ratio</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token variable">$wn</span> <span class="token operator">=</span> int<span class="token punctuation">(</span><span class="token variable">$max</span> <span class="token operator">*</span> <span class="token variable">$ratio</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$hn</span> <span class="token operator">=</span> <span class="token variable">$max</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$img</span><span class="token operator">-></span>Sample<span class="token punctuation">(</span><span class="token string">"$wn x $hn"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">my</span> <span class="token variable">$text</span><span class="token operator">=</span><span class="token string">"© by IchBins"</span><span class="token punctuation">;</span> <span class="token variable">$img</span><span class="token operator">-></span>Strip<span class="token punctuation">;</span> <span class="token variable">$img</span><span class="token operator">-></span>AutoOrient<span class="token punctuation">;</span> <span class="token variable">$img</span><span class="token operator">-></span>Annotate<span class="token punctuation">(</span>text<span class="token operator">=></span><span class="token variable">$text</span><span class="token punctuation">,</span>font<span class="token operator">=></span><span class="token string">'courier'</span><span class="token punctuation">,</span>pen<span class="token operator">=></span><span class="token string">'black'</span><span class="token punctuation">,</span>undercolor<span class="token operator">=></span><span class="token string">'#FFFFFFBB'</span><span class="token punctuation">,</span> pointsize<span class="token operator">=></span><span class="token number">30</span><span class="token punctuation">,</span>gravity<span class="token operator">=></span><span class="token string">'South'</span><span class="token punctuation">,</span>geometry<span class="token operator">=></span><span class="token string">'+20 +20'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$img</span><span class="token operator">-></span>Write<span class="token punctuation">(</span><span class="token string">"../../pics/$fname"</span><span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token keyword">die</span> <span class="token string">"Cannot write $fname!"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1744934#m1744934 ursus contionabundo 2019-03-20T12:29:55Z 2019-03-20T12:30:27Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <p>So müsste es gehen (Hab lange kein Perl mehr gemacht...):</p> <pre><code class="block language-perl"><span class="token keyword">use</span> Image<span class="token punctuation">:</span><span class="token punctuation">:</span>Magick<span class="token punctuation">;</span> function imagecopy<span class="token punctuation">(</span> <span class="token variable">$from</span><span class="token punctuation">,</span> <span class="token variable">$to</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$image</span> <span class="token operator">=</span> new Image<span class="token punctuation">:</span><span class="token punctuation">:</span>Magick<span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$image</span><span class="token operator">-></span>Read<span class="token punctuation">(</span> <span class="token variable">$from</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$image</span><span class="token operator">-></span>Write<span class="token punctuation">(</span> filename<span class="token operator">=></span><span class="token variable">$to</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>Das kann, wie beschrieben, noch mehr: <a href="https://imagemagick.org/script/perl-magick.php" rel="nofollow noopener noreferrer">Image::Magick</a></p> <p>Die Drehung (und noch viel mehr) kannst Du aus dem Original mit <a href="https://metacpan.org/pod/Image::ExifTool" rel="nofollow noopener noreferrer">ExifTool</a> auslesen.</p> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1745129#m1745129 pl 2019-03-23T07:19:09Z 2019-03-23T07:19:09Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <blockquote> <p>was sagt ihr zum perl modul File::Type und meiner vorgehensweise?</p> </blockquote> <p>Das ermittelt den Content-Type anhand einer sog. Magic Number und ist damit nicht verläßlich.</p> <p>MFG</p> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1744941#m1744941 pl 2019-03-20T16:38:40Z 2019-03-20T16:47:00Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <p>Dein</p> <pre><code> > my $fname = $q->param ("upload"); > open (FILE, ">../../pics/$fname") </code></pre> <p>ist ein schwerwiegender Fehler, die Sicherheit betreffend! Und ein Speichern macht auch keinen Sinn wenn der Type nicht passt. MFG</p> <p>PS: Was File::Type macht weißt Du?</p> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1744962#m1744962 Christian Kruse https://wwwtech.de/about 2019-03-20T19:20:35Z 2019-03-20T19:20:35Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <p>Hallo 1211chef,</p> <blockquote> <pre><code class="block language-perl"><span class="token comment"># […]</span> <span class="token keyword">my</span> <span class="token variable">$fname</span> <span class="token operator">=</span> <span class="token variable">$q</span><span class="token operator">-></span>param <span class="token punctuation">(</span><span class="token string">"upload"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Hier setzt du <code>$fname</code> auf den Parameter aus der URL.</p> <blockquote> <pre><code class="block language-perl"> <span class="token variable">$fname</span> <span class="token operator">=</span> <span class="token operator">~</span><span class="token regex">s/(?:\\|\/)([^\\\/]+)$/$1/g</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Hier ersetzt du Zeichen.</p> <blockquote> <pre><code class="block language-perl"> <span class="token keyword">my</span> <span class="token punctuation">(</span><span class="token variable">$a</span><span class="token punctuation">,</span><span class="token variable">$end</span><span class="token punctuation">)</span> <span class="token operator">=</span> split<span class="token punctuation">(</span><span class="token regex">/\.$+/</span><span class="token punctuation">,</span> <span class="token variable">$fname</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$end</span> <span class="token operator">=</span> lc<span class="token punctuation">(</span><span class="token variable">$end</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$fname</span> <span class="token operator">=</span> <span class="token variable">$ID</span><span class="token operator">.</span>time<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token string">"."</span><span class="token operator">.</span><span class="token variable">$end</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Und hier schnappst du dir die Endung und ersetzt den Dateinamen durch eine ID, deinen Timestamp und die Endung. Die ID kommt wieder aus der URL. Und ID ist auch nicht escaped noch wird sonstwie sichergestellt, dass dort keine Steuerzeichen drin sind.</p> <p>Warum machst du nicht einfach sowas?</p> <pre><code class="block language-perl"><span class="token keyword">use</span> File<span class="token punctuation">:</span><span class="token punctuation">:</span>Basename<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$ID</span> <span class="token operator">=</span> $<span class="token string">q->param("ID"); $ID =~ tr/A-</span>Za<span class="token operator">-</span>z_<span class="token operator">.</span><span class="token operator">-</span><span class="token regex">//dc</span><span class="token punctuation">;</span> <span class="token variable">$ID</span> <span class="token operator">=~</span> <span class="token regex">s/\.\.//g</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token punctuation">(</span><span class="token variable">$filename</span><span class="token punctuation">,</span> <span class="token variable">$path</span><span class="token punctuation">,</span> <span class="token variable">$suffix</span><span class="token punctuation">)</span> <span class="token operator">=</span> fileparse<span class="token punctuation">(</span><span class="token variable">$q</span><span class="token operator">-></span>param<span class="token punctuation">(</span><span class="token string">"upload"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token regex">qr/\.[^.]*/</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$fname</span> <span class="token operator">=</span> <span class="token variable">$ID</span> <span class="token operator">.</span> time<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token variable">$suffix</span><span class="token punctuation">;</span> </code></pre> <p>Wenn <code>$ID</code> nummerisch sein muss, dann sogar besser prüfen, dass der Inhalt auch wirklich nummerisch ist.</p> <blockquote> <pre><code> while (read($handle,$buffer,2048)) { print FILE $buffer; } close (FILE); </code></pre> </blockquote> <p>Hier besser</p> <pre><code class="block language-perl"><span class="token keyword">use</span> File<span class="token punctuation">:</span><span class="token punctuation">:</span>Copy<span class="token punctuation">;</span> copy<span class="token punctuation">(</span><span class="token variable">$handle</span><span class="token punctuation">,</span> <span class="token string">"../../pics/$fname"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <blockquote> <pre><code> if ( ($type ne "image/jpeg") && ($type ne "image/png") && ($type ne "image/x-png") ) { print header('text/plain'); print"L-In Error :: falsches Dateiformat $type"; unlink("../../pics/$fname"); goto end; } </code></pre> </blockquote> <p>Lieber vor dem kopieren prüfen und gar nicht erst an den Zielort kopieren.</p> <p>Der Rest sieht OK aus.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1745128#m1745128 pl 2019-03-23T07:15:20Z 2019-03-23T07:15:20Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <p>Moin,</p> <pre><code class="block language-perl"><span class="token variable">$fname</span> <span class="token operator">=</span> <span class="token operator">~</span><span class="token regex">s/(?:\\|\/)([^\\\/]+)$/$1/g</span><span class="token punctuation">;</span> </code></pre> <p>liefert übrigens eine Fehlermeldung: <code>Use of uninitialized value $_ in substitution (s///) at..</code></p> <p>MFG</p> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1745090#m1745090 1211chef 2019-03-22T16:57:48Z 2019-03-22T16:57:48Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <p>hallo christian,</p> <p>die ID ist in diesem fall eine nummer, die in der sql-datenbank unter dem jew. user vorhanden sein muss. die ID schicke ich bei jeder aktion als input type hidden mit, nachdem sich der user mit passwort eingeloggt hat. wenn die ID nicht mit der DB übereinstimmt breche ich das script schon ganz oben komplett ab. denkst du das ist ausreichend?</p> <p>zu deinem beispiel: an welcher stelle findet bei dir die fileprüfung statt? ich dachte immer ich muss eine datei erst auf dem server speichern um sie überprüfen zu können. ich kann der reihenfolge deines beispiels nicht folgen.</p> <p>zudem hab ich an anderer stelle noch ein weiteres problem, und zwar die anpassung der schriftgrösse in annotate (pointsize). bei hochformatbildern wird die schrift grösser bzw. im querformat kleiner. weiss nicht woran das liegen könnte. eine density angabe bewirkt auch nix. ich könnte schon pointsize in abhängigkeit von ratio verändern, aber ist das eine echte lösung? zitat aus imagemagic.org "die abhängigkeit zwischen density und pointsize wird nur ein gelernter grafiker verstehen". ich bin nicht mal gelernter programmierer ::seufz::</p> <p>allen erst mal eine schönes wochenende</p> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1745113#m1745113 Christian Kruse https://wwwtech.de/about 2019-03-22T20:43:50Z 2019-03-22T20:43:50Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <p>Hallo 1211chef,</p> <blockquote> <p>die ID ist in diesem fall eine nummer, die in der sql-datenbank unter dem jew. user vorhanden sein muss. die ID schicke ich bei jeder aktion als input type hidden mit, nachdem sich der user mit passwort eingeloggt hat. wenn die ID nicht mit der DB übereinstimmt breche ich das script schon ganz oben komplett ab. denkst du das ist ausreichend?</p> </blockquote> <p>Das hängt davon ab wie du prüfst, ob die ID in der Datenbank existiert da gibt es fiese Details. Du musst sicherstellen dir da keine SQL-Injection einzufangen und den Wert nicht aus Versehen zu ändern.</p> <p>Wenn du allerdings alle Details berücksichtigt hast, dann reicht das, ja.</p> <blockquote> <p>zu deinem beispiel: an welcher stelle findet bei dir die fileprüfung statt?</p> </blockquote> <p>Welche? Auf Content-Type und Inhalt? Vor dem kopieren.</p> <blockquote> <p>ich dachte immer ich muss eine datei erst auf dem server speichern um sie überprüfen zu können.</p> </blockquote> <p>Die Datei wird bereits auf dem Server gespeichert sein. Ich denke nicht, dass Perl den Inhalt im Speicher hält; das wäre eine wunderbare Möglichkeit für DoS.</p> <p>Zu deinem ImageMagick-Problem kann ich leider nichts sagen, sorry.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1745123#m1745123 pl 2019-03-23T06:41:19Z 2019-03-23T06:41:19Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <p>moin,</p> <blockquote> <p>die ID ist in diesem fall eine nummer, die in der sql-datenbank unter dem jew. user vorhanden sein muss. die ID schicke ich bei jeder aktion als input type hidden mit, nachdem sich der user mit passwort eingeloggt hat. wenn die ID nicht mit der DB übereinstimmt breche ich das script schon ganz oben komplett ab. denkst du das ist ausreichend?</p> </blockquote> <p>Wenn die ID serverseitig vorliegt ist es unsinnig sie über HTTP zu schleifen. Und was das Speichern von Dateien betrifft: Die Lösung heißt Quarantäne. Also Speichern der Dateien in einem Verzeichnis wo sie keinen Schaden anrichten können einfach nur fortlaufend numeriert wobei diese Nummern serverseitig vergeben werden. Wenn Du ohnehin eine DB Anbindung hast, gibt es auch fortlaufende Nummern, die Metadaten müssen sowieso erfasst werden.</p> <p>MFG</p> https://forum.selfhtml.org/self/2019/mar/15/gedrehte-bilddateien-abhaengig-vom-endgeraet-wie-begegnet-ihr-der-sachlage/1745134#m1745134 pl 2019-03-23T08:44:42Z 2019-03-23T08:44:42Z Gedrehte Bilddateien abhängig vom Endgerät - wie begegnet ihr der Sachlage <blockquote> <p>Ich denke nicht, dass Perl den Inhalt im Speicher hält; das wäre eine wunderbare Möglichkeit für DoS.</p> </blockquote> <p>CGI.pm schreibt temporäre Dateien. Das Modul ist Opensource da kann jeder reingucken wie das da gemacht wird. Was DoS betrifft: Ein Webserver nach CGI/1.1 Standard parst die Header aus dem Socket und legt dieses dann um nach STDOUT so daß nachgelagerte Prozesse den Body aus STDIN lesen lönnen. Gleichzeitig setzt der Webserver eine Umgebungsvariable CONTENT_LENGTH welche die Anzahl der aus STDIN zu lesenden Bytes angibt. Genau hier setzt man an wenn man in einem nachgelagerten Prozess eine DoS vermeiden will. Mit Perl hat das nichts zu tun und auch nicht damit ob ein Message Body im RAM gehalten wird. MFG</p>