Archive for October, 2006

Oct 30 2006

jQuery-Plugin - fit2Box

Published by Mathias Bank. Filed under: jQuery

[Update] There was an error using more than one box and class selectors. It is fixed now (thanks @Justin) [/Update]

Sometimes, you have the design problem that you want to fit a text into a given box. If the text is small, the font-size should be bigger. If the text is big, the font-size should be smaller.

For this problem, I have written a jQuery-Plugin: You have to put your text into a block element (p.e. a div-element) and to specify width and height of this box. Additionally you have to set an initial font-size in “px”


#testBox {
  width: 400px;
  height: 50px;
  font-size: 20px;
}

Now, you only have to call the fit2Box function:


$("#testBox").fit2Box();

You can view a demo and download the code. Have fun!

The code is tested on

  • Internet Explorer 6.0
  • Internet Explorer 7.0
  • Firefox 2.0
  • Opera 9

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...
7 responses so far

Oct 28 2006

jQuery-Plugin - getURLParam

Published by Mathias Bank. Filed under: jQuery

Version 2 is avaiable

jQuery is a fantastic JavaScript library with a fast growing community. In my opinion, the library has a lot of advantages against other libraries:

  • It is fast
  • It is easy to use
  • …. (I think you have to use it to see the advantages)

One big advantage is the plugin-possibility. If you want not to write the same code every time, the library gives the possibility to write a plugin, you can use every time.

In this way, I want to publish my plugins at this page: today the getURLParam.

This plugin can be used to get the URL parameters. You have to specify, which parameter you want. If the parameter does not exist, you will get “null”.


 var param1 = $.getURLParam("userID");

Even testing, if a specific parameter exists, is easy:


if ($.getURLParam("userID")==null) {
  alert("There is no userID");
}

The code can be found here.

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...
41 responses so far

Oct 28 2006

… a vendor, I wouldn’t buy from again

Published by Mathias Bank. Filed under: Uncategorized

A few days ago, I have written about Zarsen, which could be a new vendor for my favourite vendor list. Well, I have to strike the name off the list.

After I have phoned with Zarsen, they have said, that I have only to pay one shipping bill (I wanted to by two televisions - one for my grandparents). I recieved even this message by e-mail. So, I have ordered the televisions. But suddenly I have to pay the shipping bill two times. So I wrote a mail to Zarsen that I don’t think, that’s a good behaviour, but paid the bill (a mistake, I know).

A few days later, I reversed the order because of a really long delivery period. Now, I have waited 2 weeks to get the money back. Yesterday I phoned again with Zarsen and asked, where my money is. And - really true - they didn’t even start the transaction yet. Really incredible!

So, be warned!

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...
No responses yet

Oct 28 2006

Microsoft sends congratulation to Mozilla

Published by Mathias Bank. Filed under: The World Wide Web

Really nice, Microsoft has sent a congratulation to Mozilla for publishing Firefox 2.0. I think, that’s a really nice gesture which shows, that Microsoft is looking at Mozilla. Obviously, they have recognized, that Firefox is a competitor.

Now, Mozilla should send one back on ie7 deploy day, along with the recipe. Including of course the terms that all receivers of cakes baked using the recipe must also receive the recipe.

[via xwolf]

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...
No responses yet

Oct 25 2006

PHP-Sicherheit - Upload-Funktion

Published by Mathias Bank. Filed under: Programming

Immer wieder ist in den Nachrichten zu lesen, dass PHP unsicher sei. Das stimmt zwar, aber es stellt sich die Frage: Welche Sprache ist das nicht? Sicher bietet PHP einige Möglichkeiten, die in anderen Sprachen nicht möglich sind: so ist es z.B. per Default nicht möglich, in Java-Anwendungen eigenen Java-Code einzuschleußen. In PHP geht das von Haus aus. Aber auch in “sicheren” Sprachen können die Probleme entstehen.

Es gilt also der Grundsatz: Traue deinem Nutzer nicht!

Hält man sich strikt an diesen Grundsatz, kann eigentlich nichts schief gehen. Aber man muss sich eben daran halten.

Aus diesem Grund gehe ich heute mal genauer darauf ein, wie Upload-Daten von Usern geprüft werden können.

Die meisten Web-Anwendungen (u.a. auch Wordpress) ermöglichen das Upload von Benutzer-Dateien und beschränken diese Möglichkeit auf bestimmte Dateiendungen. Das halte ich für ein Sicherheitsrisiko! Die Endung einer Datei macht bekanntlich keinerlei Aussagen darüber, was für eine Datei wir wirklich haben. So ging erst vor ein paar Monaten eine Sicherheitslücke des Internet Explorers durch die Medien, weil dieser JavaScript innerhalb von GIF-Dateien ausführte. Es ist also in diesem Fall nicht das drin, was drauf steht.

Meiner Meinung nach muss man mit solchen Lücken des Benutzer-Systems immer rechnen. Es reicht nicht zu sagen: “Ist nicht mein Problem, der Fehler stammt vom IE.” Betroffene Nutzer werden sich genau daran erinnern, wo sie sich etwas eingefangen haben. Und das sollte man sich nicht leisten wollen: es dauert lange, bis man einen guten Ruf bekommt. Ein schlechter Ruf bekommt man dafür umso schneller.

Aber auch auf Servern existiert dieses Risiko. So wäre es denkbar, dass innerhalb einer JPEG-Datei PHP-Code enthalten ist. Ist der Server fehlerhaft eingestellt oder gelingt es einem Hacker, die .htaccess-Datei anzupassen, so wird jedes JPEG-Bild vor dem Ausliefern auf dem Server ausgeführt (inkl. PHP-Code). Auf diese Weise wäre es ein einfaches, Cookies des Benutzers auszulesen (z.B. Login-Daten), ohne dass es auch nur irgendjemand merkt (die Bild-Informationen könnte man ja entsprechend ausliefern). Solche Risiken sind sehr gefährlich: welcher Admin prüft schon regelmäßig, ob jemand an der Server-Einstellung gefummelt hat?

Eine weitere Angriffsmöglichkeit bestünde darin, dass bekannte Lücken von Programmen ausgenutzt werden (evtl. Bufferoverflow von Programmen). So ist evtl. das direkte Unterschieben präparierter Daten möglich.

Aus diesem Grund reicht es meiner Meinung nach nicht, Dateien lediglich auf Ihre Endung zu prüfen. Systeme wie Wordpress, in denen Nutzer Daten hochladen können, sind deshalb ein potentielles Risiko. Es ist also die Frage, wie kann ich sicherstellen, dass in den Dateien das drin ist, was drauf steht?

Für Bilder ist diese Möglichkeit sehr einfach: die Funktion getimagesize übernimmt die Prüfung der Bildformate GIF, JPEG, PNG und sogar des Flash-Formats SWF. Handelt es sich um gültige Dateien, werden Bildinformationen zurückgeliefert. Ansonsten erhält man als Rückgabewert “NULL”. Spätestens hier sollte man das hochgeladene Bild wieder Löschen, den Benutzer informieren und sicherheitshalber die Daten des Nutzers protokollieren, um ihn bei erneutem Versuch auszusperren.

Andere Formate sind schon komplizierter. Für viele Formate hilft aber die OpenSource-Bibliothek getID3, welche neben Audio, Video und Bildformaten auch gepackte Formate prüfen kann. Die Bibliothek kann natürlich noch weit mehr, aber sie prüft eben auch die Inhalte der Dateien.


include_once("getid3/getid3.php");
$file="test.mp3";
$tester = new getID3;
$filedata = $tester->analyze($file);

Nun sind in filedata alle Informationen enthalten, unter anderem das Audio-Format (unabhängig von der Endung) als auch Bitraten,…

Mit der Bibliothek können also schon einige Datei-Typen auf Inhalt geprüft werden. Für die Restlichen wird es schwieriger. Doch stellt PHP die Funktion mine-content-type zur Verfügung. Diese liefert zu einer Datei den angegebenen Mime-Type. Damit ist es möglich, den angegebenen Inhalt einer Datei unabhängig vom Dateinamen zu erhalten. Die Funktion stellt aber nicht sicher, dass es dann auch wirklich der korrekte Inhalt ist (der Mime-Type könnte ja gefälscht sein). Hier also aufpassen! Eine Möglichkeit, hier zu testen, besteht darin, den Dateiinhalt auf verdächtige Elemente zu durchsuchen. Das hängt jedoch vom Einsatzgebiet ab.

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...
8 responses so far

« Previous Entries

^