PHP: Kurzschreibweise für echo

Posted: Januar 28th, 2013 | Filed under: Programmieren, Tutorials | Tags: , , , , | No Comments »

Falls man keine Template-Engine wie beispielsweise Smarty verwendet, bietet es sich an PHP-Ausgaben im jeweiligen HTML-Dokument mit Hilfe der Kurzschreibweise auszugeben. Folgendes Beispiel veranschaulicht diese:

<?php
   $text = "Hallo Welt";
?>

// Entspricht <?php echo $text; ?>
<?= $text ?>

// Ausgabe: Hallo Welt

Diese Kurzschreibweise konnte allerdings vor PHP-Version 5.4.0 durch den php.ini-Wert short_open_tag = off abgeschaltet werden. Mittlerweile jedoch steht <?= $var ?> immer zur Verfügung.

Vor PHP 5.4.0 betraf diese Option auch die Kurzform <?=, die zu <? echo identisch ist. Um diese Kurzform nutzen zu können, musste short_open_tag auf on gesetzt sein. Seit PHP 5.4.0 ist <?= immer verfügbar.

Quelle: http://php.net/manual/de/ini.core.php


UML Diagramm aus Java Code erzeugen

Posted: Januar 8th, 2013 | Filed under: Java, Software | Tags: , , , | 1 Comment »

Aus Dokumentationsgründen ist es oft notwendig aus bestehendem Quellcode UML-Diagramme zu erzeugen. Seit einiger Zeit benutze ich das schwedische Tool EssModel, welches einfach und schnell zu bedienen ist.

Über den “File > Open folder …” könnt ihr einfach den Source-Ordner eures Java-Projekts angeben.

image

Um alle Assoziationen und Vererbungen im UML-Diagramm anzuzeigen, sollte in der Hauptansicht unter Connections folgender Wert ausgewählt werden:

image

Unter dem Menüpunkt “Diagram > Save as picture…” kann man das ausgewählte Diagramm schließlich exportieren.

Download

Herunterladen könnt ihr EssModel hier: http://essmodel.sourceforge.net/


Java: Countdown und Timer (am Beispiel von Swing)

Posted: Dezember 21st, 2012 | Filed under: Java, Programmieren | Tags: , , , , , , | 12 Comments »

Häufig benötigt man für Applikationen einen Zeitnehmer, oder es soll ein bestimmtes Event nach einer gewissen Zeit ausgeführt werden. Mit Hilfe der Klasse Timer aus der Swing-Bibliothek kann ein sogenannter Countdown leicht erstellt werden. Das folgende Beispiel veranschaulicht die Realisierung eines Countdowns.

Screenshot

image

Quellcode

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;
import javax.swing.WindowConstants;


public class Countdown extends JFrame {
 
  // Countdown mit 42 Sekunden
  public static int counterValue = 42;
  public static Timer timer;
  public static JLabel label;
 
  public Countdown() {
    initGUI();
  }
 
  // GUI-Erzeugen
  private void initGUI(){
    BorderLayout thisLayout = new BorderLayout();
    this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    this.getContentPane().setLayout(thisLayout);
    label = new JLabel();
    label.setText(String.valueOf(counterValue));
    this.getContentPane().add(label, BorderLayout.CENTER);
    this.setTitle("Countdown Example");
      this.pack();
      this.setVisible(true);
  }
 

  public static void main(String[] args) {
    // GUI erzeugen
    Countdown countdown = new Countdown();
   
    // Timer erzeugen, jede 1000 Millisekunden (= 1 Sekunde)
    // Methode actionPerformed aufrufen.
    Countdown.timer = new Timer(1000, new ActionListener() {
     
      public void actionPerformed(ActionEvent e) {
        // 1 Sekunde abziehen
        Countdown.counterValue--;
       
        // Zahl in Label darstellen
        Countdown.label.setText(String.valueOf(counterValue));
       
        // Falls Zähler = 0, Countdown abgelaufen!
        if(Countdown.counterValue == 0){
          System.out.println("Counterdown ausgelaufen!");
         
          // Timer stoppen
          Countdown.timer.stop();
        }
      }
    });
       
    // Timer starten
    timer.start();
  }
}

In der Klasse Timer kann im Konstruktor ein Zeitwert und ein Listener übergeben werden. Die actionPerformed-Methode dieses Listeners wird, nachdem der Timer gestartet wurde, alle 1000 ms (=1 s), aufgerufen. Die Methode actionPerfomed ist also unser Taktgeber beim Abziehen einer Sekunde von der aktuellen Countdown-Zahl. Erreicht unsere Zahl den Wert 0, ist der Countdown schließlich abgelaufen.


Sicherheitslücken in Webapplikationen – Seminararbeit

Posted: Dezember 18th, 2012 | Filed under: Programmieren, Sicherheit, Tutorials | Tags: , , , , , , , , , , , , , , , | 3 Comments »

Abstract

Da webseitenbasierte Applikationen immer mehr an Bedeutung gewinnen, stellt sich die Frage nach der Vertraulichkeit, mit der unsere im World Wide Web gespeicherten Daten behandelt werden. Sicherheitslücken und erfolgreiche Angriffe auf Webapplikationen schaden oft nicht nur dem Betreiber des jeweiligen Dienstes, sondern auch dem Endverbraucher, der seine privaten Daten wie beispielsweise Konto- oder Kreditkartennummer, E-Mail-Adresse oder Passwörter an den Angreifer unfreiwillig abgibt.

In dieser Arbeit werden häufige Sicherheitslücken in PHP-basierten Webanwendungen erklärt und anhand eines praktischen Beispiels verständlich gemacht. Um einen Überblick über eingesetzte Websprachen zu geben wird zu Beginn der Arbeit auf die Verbreitung verschiedener Sprachen eingegangen. Resultierend aus dem hohen Marktanteil werden Sicherheitslücken und Angriffsmechanismen wie Remote Command Execution, SQL-Injections, XSS-Attacken, Cross-Site Request Forgery und HTTP Response Splitting am Beispiel von PHP vorgestellt. In einem zweiten Teil der Arbeit wird beschrieben, wie man Passwörter mit Hilfe von sogenannten gesalzenen Hashes in einer Datenbank sicher schützen kann. Zum Abschluss wird das PHP-Framework CodeIgniter und seine Schutzmechanismen vor Angriffen auf Applikationsebene vorgestellt. Sicherheitsprobleme auf Netzwerk- und Betriebsystemebene werden in dieser Arbeit aufgrund des begrenzten Umfanges nicht angesprochen.

Inhaltsverzeichnis

  • Abstract
  • Einleitung
  • Angriffsmechanismen
    • Remote Command Execution
    • XSS – Cross-Site-Scripting
    • SQL-Injections
    • Datei-Upload
    • Cross-Site Request Forgery
    • HTTP Response Splitting
  • Passwörter in Datenbank schützen
    • Einwegverschlüsselung
    • Hashwerte salzen
  • Einsatz von Frameworks
    • CodeIgniter
      • Schutzmechanismus: URL-Sicherheit
      • Schutzmechanismus: Error-Reporting
      • Schutzmechanismus: Hochkommas escapen
      • Schutzmechanismus: XSS-Filter
      • Schutzmechanismus: SQL-Injection
      • Schutzmechanismus: Form-Validation
      • Schutzmechanismus: CSRF-Protection

Download

Herunterladen könnt ihr euch meine Seminararbeit unter Folgendem Link:

http://blog.mynotiz.de/downloads/sicherheitsluecken_in_webapplikationen_frank_roth.pdf (PDF)

Screenshots

Screenshots vom Inhaltsverzeichnis und dem Abstract.

imageimageimageimage


JavaScript Text Linkerkennung – Hyperlinks erzeugen

Posted: Juni 29th, 2012 | Filed under: Internet, Java, Programmieren, Tutorials | Tags: , , , , , , | 3 Comments »

Facebook, Twitter oder sonstige soziale Kommunikationsplattformen verwenden es bereits. Eine automatische Linkerkennung die auf benutzerbasierten Inhalten angewendet wird. Mit Hilfe der Bibliothek XRegExp und nach stundenlanger Internetrecherche habe ich es endlich geschafft. Die folgende Methode erkennt automatisch URLs in einem Text und ersetzt diese mit einem Hyperlink zu der jeweiligen URL. Vorteil dabei ist, dass der Benutzer den Link nicht mehr per Hand in die Kopfzeile seines Browsers kopieren muss sondern einfach per Klick den jeweiligen Link öffnen kann.

WICHTIG: Es wird die Bibliothek XRegExp (3.5 KB) benötigt!


// JavaScript - Methodenerweiterung der String-Klasse
// String s an Stelle idx einfügen und rem Zeichen löschen.
// rem normalerweise immer = 0
String.prototype.splice = function( idx, rem, s ) {
    return (this.slice(0,idx) + s + this.slice(idx + Math.abs(rem)));
};

// Ersetzungslogik: <a href="[LINK]" target="_blank">[LINK]</a>
var insertString1 = "<a href=\"";
var insertString2 = "\"  target=\"_blank\">";
var insertString3 = "</a>";

// JavaScript-Methode - URLs im Text zu Hyperlinks machen
function parseTextToLinks(text){
	var positionOffset;
	var startPos;
	var endPos;

	// Regulärer Ausdruck - Linkerkennung
	var regex = XRegExp.globalize(/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'\".,<>?]))/);
	regex.global;

	// Hilfsvariablen
	var newText = text;
	positionOffset = 0;

	while (match = regex.exec(text)) {
		startPos = match.index;
		endPos = startPos + match[0].length;

		newText = newText.splice(startPos + positionOffset, 0, insertString1);
		positionOffset += insertString1.length;

		newText = newText.splice(endPos + positionOffset, 0, insertString2);
		positionOffset += insertString2.length;

		newText = newText.splice(endPos + positionOffset, 0, match[1]);
		positionOffset += match[1].length;

		newText = newText.splice(endPos + positionOffset, 0, insertString3);
		positionOffset += insertString3.length;
	}
	return newText;
}