<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.owasp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Michal+Vossberg</id>
		<title>OWASP - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.owasp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Michal+Vossberg"/>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php/Special:Contributions/Michal_Vossberg"/>
		<updated>2026-05-15T16:21:28Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.2</generator>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Michal_Vossberg&amp;diff=155059</id>
		<title>User:Michal Vossberg</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Michal_Vossberg&amp;diff=155059"/>
				<updated>2013-07-04T11:57:35Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Architect&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=155058</id>
		<title>Germany/Projekte/Top 10 fuer Entwickler-2013/A6-Verlust der Vertraulichkeit sensibler Daten</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=155058"/>
				<updated>2013-07-04T11:55:01Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top_10_2010_Developer_Edition_De:TopTemplate&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
== Seite in Bearbeitung (BAUSTELLE!!) ==&lt;br /&gt;
&lt;br /&gt;
== A7 Kryptografisch unsichere Speicherung == &lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SummaryTableHeaderBeginTemplate|year=2010|language=de}}&lt;br /&gt;
  {{Top_10:SummaryTableTemplate|exploitability=3|prevalence=3|detectability=2|impact=1|language=de|year=2013}}&lt;br /&gt;
{{Top_10_2010:SummaryTableHeaderEndTemplate}}&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Jeder Benutzer des Systems ist zu betrachten.&lt;br /&gt;
Haben diese ein Interesse, auf geschützte Daten unberechtigt zuzugreifen?&lt;br /&gt;
Wie steht es um Administratoren?&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Angreifer brechen üblicherweise nicht die eigentliche Kryptografie. Statt dessen finden Sie Schlüssel, Klartexte oder greifen über Kanäle mit automatischer Entschlüsselung auf Daten zu.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td colspan=2  {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehlende Verschlüsselung vertraulicher Daten ist die häufigste Schwachstelle, gefolgt von unsicherer Schlüsselerzeugung, der Speicherung statischer Schlüssel und die Nutzung schwacher Algorithmen. Schwache Hashwerte ohne Salt kommen zum Passwortschutz oft vor. Ein eingeschränkter Zugriff lässt externe Angreifer solche Probleme i.d.R. nicht leicht entdecken. Den nötigen Zugriff müssen sie vorher auf andere Weise erlangen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehler kompromittieren regelmäßig vertrauliche Daten. Es handelt sich hierbei oft um sensitive Daten wie personenbezogene Daten, Benutzernamen und Passwörter oder Kreditkarteninformationen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Betrachten Sie den Wert verlorener Daten und die Auswirkungen auf die Reputation des betroffenen Unternehmens. Hat es ggf. auch juristische Konsequenzen, wenn die Daten bekannt werden?&amp;lt;/td&amp;gt;&lt;br /&gt;
{{Top_10_2010:SummaryTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=main}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=firstLeft|risk=7|year=2010|language=de}}  &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 1&amp;lt;/u&amp;gt;''': Eine Anwendung speichert verschlüsselt Kreditkartendaten in einer Datenbank, um Sie vor Angreifern zu schützen. Die Datenbank ist so eingerichtet, dass die Daten beim Auslesen automatisch entschlüsselt werden. Durch SQL-Injection können in diesem Fall alle Kreditkartendaten im Klartext ausgelesen werden. Das System hätte so konfiguriert sein sollen, dass nur nachgelagerte Anwendungen und nicht die Webanwendung selbst entschlüsseln dürfen.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 2&amp;lt;/u&amp;gt;''': Ein Datensicherungsband speichert verschlüsselte Gesundheitsdaten, aber der Schlüssel ist ebenfalls dort gespeichert. Das Band geht auf dem Transportweg verloren.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 3&amp;lt;/u&amp;gt;''': Die Passwortdatenbank benutzt Hashwerte ohne Salt zur Speicherung der Passwörter. Eine Schwachstelle in der Downloadfunktion ermöglicht einem Angreifer den Zugriff auf die Datei. Zu allen Hashes kann in vier Wochen ein passender Klartext gefunden werden. Bei starken Hashwerten mit Salt hätte dieser Angriff über 3000 Jahre gedauert.&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=7|year=2010|language=de}} &lt;br /&gt;
Eine Übersicht über alle Tücken unsicherer Kryptografie liegt weit außerhalb des Rahmens der Top 10. Für alle vertraulichen Daten sollten Sie zumindest:&lt;br /&gt;
# Die Bedrohungen betrachten, vor denen Sie die Daten schützen wollen (z. B. Innen- und Außentäter) und sicherstellen, dass diese Daten angemessen durch Verschlüsselung geschützt werden.&lt;br /&gt;
# Sicherstellen, dass ausgelagerte Datensicherungen verschlüsselt sind und die Schlüssel getrennt verwaltet und gesichert werden.&lt;br /&gt;
# Sicherstellen, dass angemessene, starke Algorithmen und Schlüssel verwendet und verwaltet werden.&lt;br /&gt;
# Sicherstellen, dass Passwörter mit einem starken Algorithmus und einem angemessenen Salt gehasht werden.&lt;br /&gt;
# Sicherstellen, dass alle Schlüssel und Passwörter vor unberechtigtem Zugriff geschützt sind.&lt;br /&gt;
{{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=left|risk=6|year=2013}}&lt;br /&gt;
====temporär: Auszug aus [[Top_10_2013-A6-Sensitive_Data_Exposure| Top 10-2013 RC1: A6-Sensitive_Data_Exposure]]====&lt;br /&gt;
&amp;lt;u&amp;gt;Scenario #1:&amp;lt;/u&amp;gt; An application encrypts credit card numbers in a database using automatic database encryption. However, this means it also decrypts this data automatically when retrieved, allowing an SQL injection flaw to retrieve credit card numbers in clear text. The system should have encrypted the credit card numbers using a public key, and only allowed back-end applications to decrypt them with the private key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Scenario #2:&amp;lt;/u&amp;gt; A site simply doesn't use SSL for all authenticated pages. Attacker simply monitors network traffic (like an open wireless network), and steals the user’s session cookie. Attacker then replays this cookie and hijacks the user’s session, accessing all their private data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Scenario #3:&amp;lt;/u&amp;gt; The password database uses unsalted hashes to store everyone’s passwords. A file upload flaw allows an attacker to retrieve the password file. All the unsalted hashes can be exposed with a rainbow table of precalculated hashes.&lt;br /&gt;
{{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=6|year=2013}}&lt;br /&gt;
====temporär: Auszug aus [[Top_10_2013-A6-Sensitive_Data_Exposure| Top 10-2013 RC1: A6-Sensitive_Data_Exposure]]====&lt;br /&gt;
The full perils of unsafe cryptography, SSL usage, and data protection are well beyond the scope of the Top 10. That said, for all sensitive data, do all of the following, at a minimum:&lt;br /&gt;
# Considering the threats you plan to protect this data from (e.g., insider attack, external user), make sure you encrypt all sensitive data at rest and in transit in a manner that defends against these threats.&lt;br /&gt;
# Don’t store sensitive data unnecessarily. Discard it as soon as possible. Data you don’t have can’t be stolen.&lt;br /&gt;
# Ensure strong standard algorithms and strong keys are used, and proper key management is in place.&lt;br /&gt;
Ensure passwords are stored with an algorithm specifically designed for password protection, such as [http://en.wikipedia.org/wiki/Bcrypt  bcrypt], [http://en.wikipedia.org/wiki/PBKDF2  PBKDF2], or [http://en.wikipedia.org/wiki/Scrypt  scrypt].&lt;br /&gt;
# Disable autocomplete on forms collecting sensitive data and disable caching for pages displaying sensitive data.&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
= '''JAVA''' =  &lt;br /&gt;
&amp;lt;!-- z.Z ohne Template ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
Ein einfaches Beispiel für die Veschlüsselung von Texten, hier mit dem AES-128 Algorithmus. Die Auswahl an Verschlüsselungsparametern wie beispielsweise Algorithmus, Ciphermodus oder Schlüssellänge ist groß und kommt immer auf die jeweiligen Daten und die Anwendung an. &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
String plainText = &amp;quot;HelloWorld&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// password setzen &lt;br /&gt;
String password = &amp;quot;my128bitPassword&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// CBC Cipher immer mit einem zufällig erzeugten &lt;br /&gt;
// Initialization Vector (IV) initialisieren (Länge 16 Byte)&lt;br /&gt;
byte[] ivBytes = new byte[16];&lt;br /&gt;
(new SecureRandom()).nextBytes(ivBytes);&lt;br /&gt;
&lt;br /&gt;
// den Schlüssel erzeugen&lt;br /&gt;
SecretKeySpec key = new SecretKeySpec(password.getBytes(), &amp;quot;AES&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// Container für die Verschlüsselungs Parameter&lt;br /&gt;
IvParameterSpec paramSpec = new IvParameterSpec(ivBytes); &lt;br /&gt;
&lt;br /&gt;
// Chiffrierer erzeugen und initialisieren&lt;br /&gt;
// Algorithmus: AES&lt;br /&gt;
// Modus: CBC&lt;br /&gt;
// Padding: PKCS5Padding&lt;br /&gt;
Cipher cipher = Cipher.getInstance(&amp;quot;AES/CBC/PKCS5Padding&amp;quot;);&lt;br /&gt;
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); &lt;br /&gt;
&lt;br /&gt;
// Verschlüsselung durchführen&lt;br /&gt;
byte[] encrypted = cipher.doFinal(plainText.getBytes());&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Benutzung der ESAPI erleichtert die Handhabung, da neben einer großen Bandbreite an Verschlüsselungs-, Hash-, und Signaturalgorithmen auch Methoden für die Schlüsselerzeugung und -verwaltung unterstüzt werden. Nach Initialisierung der Parameter in der Konfigurationsdatei ESAPI.properties, reduziert sich die eigentliche Verschlüsselung eines Textes beispielsweise zu:&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
CipherText ciphertext = &lt;br /&gt;
   ESAPI.encryptor().encrypt( new PlainText(myplaintext) );&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
Beispiele für das Hashen von Passwörtern. Um die Sicherheit zu erhöhen sollte jedes Passwort mit einem Zufallswert (Salt) berechnet und gespeichert werden sowie möglichst viele Iterationen beim Hashing genutzt werden.&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
String password = &amp;quot;mypassword&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// salt anlegen und mit zufälligen Bytes befüllen&lt;br /&gt;
byte[] salt = new byte[8];&lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
// Hash-Generator anlegen (verwendeter Algorithmus ist SHA-256)&lt;br /&gt;
// und mit salt initialisieren (=&amp;gt; höhere Sicherheit gegen Angriffe)&lt;br /&gt;
MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-256&amp;quot;);&lt;br /&gt;
digest.reset();&lt;br /&gt;
digest.update(salt);&lt;br /&gt;
&lt;br /&gt;
byte[] input = digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// Hash in mehreren Iterationen (n = 100.000) berechnen&lt;br /&gt;
// mehr Iterationen verlangsamen Angriffe (signifikant?)&lt;br /&gt;
for (int i = 0; i &amp;lt; 100000; i++) {&lt;br /&gt;
   digest.reset();&lt;br /&gt;
   input = digest.digest(input);&lt;br /&gt;
}&lt;br /&gt;
// am Ende der Iterationen enthält input den berechneten Hash&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sicherer ist allerdings die Nutzung einer PBKDF2 (Password-Based Key Derivation Function 2) wie im folgenden Beispiel: &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public byte[] generatePBKDF2Hash(String password) &lt;br /&gt;
   throws NoSuchAlgorithmException, InvalidKeySpecException {  &lt;br /&gt;
&lt;br /&gt;
	byte[] salt = new byte[20]; &lt;br /&gt;
	// salt mit zufälligen Bytes befüllen&lt;br /&gt;
	(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
	int iterations = 10000;&lt;br /&gt;
	int keyLength  = 160;&lt;br /&gt;
	// neuen Schlüssel erzeugen &lt;br /&gt;
	SecretKeyFactory factory = SecretKeyFactory.getInstance(&amp;quot;PBKDF2WithHmacSHA1&amp;quot;);&lt;br /&gt;
	PBEKeySpec pbeKeySpec = new PBEKeySpec(password, salt, iterations, keyLength);&lt;br /&gt;
        SecretKey mySecretKey = factory.generateSecret(pbeKeySpec);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
byte[] hash = generatePBKDF2Hash(password).getEncoded();&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine weiterer empfohlener Algorithmus ist bcrypt, hier bespielsweise unter Verwendung der jBCrypt-Bibliothek (siehe Referenzen).&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
String hashed = BCrypt.hashpw(password, BCrypt.gensalt(12));&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zu bcrypt gibt es mittlerweile eine noch sicherere Variante scrypt, der Link zu einer Beispielimplementierung findet sich bei den Referenzen.&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=3|risk=7|year=2010|language=de}}&lt;br /&gt;
Um geheime Schlüssel sicher, aber auch gleichzeitig einfach zugänglich und austauschbar aufzubewahren empfiehlt sich eine spezielle Schlüsseldatei, wie beispielweise der Java KeyStore. In dieser Datei werden die Schlüssel mit einem Master-Password gesichert, die Datei selbst sollte getrennt von den verschlüsselten Daten abgelegt werden:&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
// Erzeugung eines symmetrischen Schlüssels mittels der vorher beschriebenen PBKDF2&lt;br /&gt;
String password = &amp;quot;mypassword&amp;quot;;&lt;br /&gt;
byte[] mySecretKey = generatePBKDF2Hash(password);&lt;br /&gt;
&lt;br /&gt;
// neuen KeyStore für symmetrische Schlüssel erzeugen &lt;br /&gt;
KeyStore ks = KeyStore.getInstance(&amp;quot;JCEKS&amp;quot;);&lt;br /&gt;
ks.load(null, null);&lt;br /&gt;
&lt;br /&gt;
// Schlüssel speichern&lt;br /&gt;
KeyStore.ProtectionParameter passwordProtection = &lt;br /&gt;
     new KeyStore.PasswordProtection(password);&lt;br /&gt;
KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(mySecretKey);&lt;br /&gt;
ks.setEntry(&amp;quot;beispielkey&amp;quot;, entry, passwordProtection);&lt;br /&gt;
&lt;br /&gt;
// KeyStore in Datei speichern &lt;br /&gt;
FileOutputStream fos = new FileOutputStream(&amp;quot;SecretKeyStoreDatei&amp;quot;);&lt;br /&gt;
ks.store(fos,password);&lt;br /&gt;
fos.close();&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=1|risk=6|year=2013|language=de}}&lt;br /&gt;
;Unzureichende Absicherung der Transportschicht&lt;br /&gt;
&lt;br /&gt;
Um die Verschlüsselung auf der Transportebene sollte sich der Entwickler nie selbst kümmern, sondern dies immer dem Webserver überlassen:&lt;br /&gt;
&lt;br /&gt;
Im J2EE-Deployment-Descriptor der Anwendung (= web.xml) ist die folgende Konfiguration vorzunehmen, um sicherzustellen, dass nur ausschließlich über https kommuniziert wird:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;security-constraint&amp;gt;&lt;br /&gt;
   &amp;lt;web-resource-collection&amp;gt;&lt;br /&gt;
     &amp;lt;web-resource-name&amp;gt;Protected Context&amp;lt;/web-resource-name&amp;gt;&lt;br /&gt;
     &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
   &amp;lt;/web-resource-collection&amp;gt;&lt;br /&gt;
   &amp;lt;!-- auth-constraint an dieser Stelle für Authentisierung  --&amp;gt;&lt;br /&gt;
   &amp;lt;user-data-constraint&amp;gt;&lt;br /&gt;
      &amp;lt;transport-guarantee&amp;gt;CONFIDENTIAL&amp;lt;/transport-guarantee&amp;gt;&lt;br /&gt;
   &amp;lt;/user-data-constraint&amp;gt;&lt;br /&gt;
&amp;lt;/security-constraint&amp;gt;&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Session-Cookies ist immer das Attribute SECURE zu setzen:&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;session-config&amp;gt; &lt;br /&gt;
   &amp;lt;cookie-config&amp;gt; &lt;br /&gt;
      &amp;lt;secure&amp;gt;&lt;br /&gt;
         true&lt;br /&gt;
      &amp;lt;/secure&amp;gt; &lt;br /&gt;
   &amp;lt;/cookie-config&amp;gt; &lt;br /&gt;
&amp;lt;/session-config&amp;gt; &lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
In der Server-Configuration ist sicherzustellen, dass nur TLS und SSL3 unterstützt werden.&lt;br /&gt;
Das Speichern von vertraulichen Inhalten am Client oder auf einem Proxy kann über den Header Cache-Control verhindert werden:&lt;br /&gt;
&lt;br /&gt;
     Header set Cache-Control &amp;quot;no-cache, no store, must-revalidate&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Weitere Hinweise im [https://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet Transport Layer Protection Cheat Sheet]&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=1a|risk=9|year=2010|language=de}}&lt;br /&gt;
&lt;br /&gt;
Die Sicherheitskonfiguration unter Option 1 hat noch eine Schwachstelle, so das MITM (Man In The Middle attack) nicht zuverlässig verhindert wird. MITM erzeugt einen Zertifikatsfehler am Client, der üblicherweise aber (durch den Anwender) ignoriert wird. Deshalb wurde der HTTP-Header &amp;quot;HTTP Strict Transport Security (HSTS)&amp;quot; eingeführt. Damit werden kompatible Browser (Firefox, Chrome, Opera aber bisher NICHT IE) angewiesen, dass &lt;br /&gt;
* der Browser den http-Request ausschließlich über https verschickt (auch falls die Seite mit http aufgerufen wird).&lt;br /&gt;
* der Anwender Zertifikatsfehler im Browser nicht mehr ignorieren kann.&lt;br /&gt;
&lt;br /&gt;
Konfiguration im Apache:&lt;br /&gt;
     Header set Strict-Transport-Security &amp;quot;max-age=16070400; includeSubDomains&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Da der HSTS-Header nur über https übermittelt wird ist zusätzlich ein Redirect nötig:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
       ServerAlias *&lt;br /&gt;
       RewriteEngine On&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [redirect=301]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quellen: &lt;br /&gt;
&lt;br /&gt;
[https://www.owasp.org/index.php/HTTP_Strict_Transport_Security HTTP_Strict_Transport_Security ]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=zEV3HOuM_Vw&amp;amp;feature=youtube_gdata AppSecTutorial Series - Episode 4]&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Überblick über die Anforderungen und die hierbei zu vermeidenden Probleme gibt es unter [http://www.owasp.org/index.php/ASVS#tab=ASVS ASVS requirements on Cryptography (V7)]. Des Weiteren:&lt;br /&gt;
* [[Top_10_2007-Insecure_Cryptographic_Storage | OWASP Top 10-2007 on Insecure Cryptographic Storage]]&lt;br /&gt;
* [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encryptor.html ESAPI Encryptor API]&lt;br /&gt;
* [http://www.owasp.org/index.php/Guide_to_Cryptography#Insecure_transmission_of_secrets OWASP Development Guide: Chapter on Cryptography]&lt;br /&gt;
* [[Codereview-Cryptography | OWASP Code Review Guide: Chapter on Cryptography]]&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubSubsectionExternalReferencesTemplate|language=de}}&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/310.html CWE Entry 310 on Cryptographic Issues]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/312.html CWE Entry 312 on Cleartext Storage of Sensitive Information]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/326.html CWE Entry 326 on Weak Encryption]&lt;br /&gt;
* [http://www.mindrot.org/projects/jBCrypt Reine Java Implementierung von BCrypt]&lt;br /&gt;
* [https://github.com/wg/scrypt Beispielimplementierung von SCrypt]&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''Test''' =&lt;br /&gt;
&amp;lt;!-- weitere Programmiersprachen oder evtl Anti-Beispiele ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=|risk=7|year=2010|language=de}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=7|year=2010|language=de}}&lt;br /&gt;
(ganze Breite)&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:BottomAdvancedTemplate&lt;br /&gt;
    |type=0&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Top 10 fuer Entwickler]]&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=155056</id>
		<title>Germany/Projekte/Top 10 fuer Entwickler-2013/A6-Verlust der Vertraulichkeit sensibler Daten</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=155056"/>
				<updated>2013-07-04T11:50:39Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top_10_2010_Developer_Edition_De:TopTemplate&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
== Seite in Bearbeitung (BAUSTELLE!!) ==&lt;br /&gt;
&lt;br /&gt;
== A7 Kryptografisch unsichere Speicherung == &lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SummaryTableHeaderBeginTemplate|year=2010|language=de}}&lt;br /&gt;
  {{Top_10:SummaryTableTemplate|exploitability=3|prevalence=3|detectability=2|impact=1|language=de|year=2013}}&lt;br /&gt;
{{Top_10_2010:SummaryTableHeaderEndTemplate}}&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Jeder Benutzer des Systems ist zu betrachten.&lt;br /&gt;
Haben diese ein Interesse, auf geschützte Daten unberechtigt zuzugreifen?&lt;br /&gt;
Wie steht es um Administratoren?&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Angreifer brechen üblicherweise nicht die eigentliche Kryptografie. Statt dessen finden Sie Schlüssel, Klartexte oder greifen über Kanäle mit automatischer Entschlüsselung auf Daten zu.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td colspan=2  {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehlende Verschlüsselung vertraulicher Daten ist die häufigste Schwachstelle, gefolgt von unsicherer Schlüsselerzeugung, der Speicherung statischer Schlüssel und die Nutzung schwacher Algorithmen. Schwache Hashwerte ohne Salt kommen zum Passwortschutz oft vor. Ein eingeschränkter Zugriff lässt externe Angreifer solche Probleme i.d.R. nicht leicht entdecken. Den nötigen Zugriff müssen sie vorher auf andere Weise erlangen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehler kompromittieren regelmäßig vertrauliche Daten. Es handelt sich hierbei oft um sensitive Daten wie personenbezogene Daten, Benutzernamen und Passwörter oder Kreditkarteninformationen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Betrachten Sie den Wert verlorener Daten und die Auswirkungen auf die Reputation des betroffenen Unternehmens. Hat es ggf. auch juristische Konsequenzen, wenn die Daten bekannt werden?&amp;lt;/td&amp;gt;&lt;br /&gt;
{{Top_10_2010:SummaryTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=main}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=firstLeft|risk=7|year=2010|language=de}}  &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 1&amp;lt;/u&amp;gt;''': Eine Anwendung speichert verschlüsselt Kreditkartendaten in einer Datenbank, um Sie vor Angreifern zu schützen. Die Datenbank ist so eingerichtet, dass die Daten beim Auslesen automatisch entschlüsselt werden. Durch SQL-Injection können in diesem Fall alle Kreditkartendaten im Klartext ausgelesen werden. Das System hätte so konfiguriert sein sollen, dass nur nachgelagerte Anwendungen und nicht die Webanwendung selbst entschlüsseln dürfen.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 2&amp;lt;/u&amp;gt;''': Ein Datensicherungsband speichert verschlüsselte Gesundheitsdaten, aber der Schlüssel ist ebenfalls dort gespeichert. Das Band geht auf dem Transportweg verloren.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 3&amp;lt;/u&amp;gt;''': Die Passwortdatenbank benutzt Hashwerte ohne Salt zur Speicherung der Passwörter. Eine Schwachstelle in der Downloadfunktion ermöglicht einem Angreifer den Zugriff auf die Datei. Zu allen Hashes kann in vier Wochen ein passender Klartext gefunden werden. Bei starken Hashwerten mit Salt hätte dieser Angriff über 3000 Jahre gedauert.&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=7|year=2010|language=de}} &lt;br /&gt;
Eine Übersicht über alle Tücken unsicherer Kryptografie liegt weit außerhalb des Rahmens der Top 10. Für alle vertraulichen Daten sollten Sie zumindest:&lt;br /&gt;
# Die Bedrohungen betrachten, vor denen Sie die Daten schützen wollen (z. B. Innen- und Außentäter) und sicherstellen, dass diese Daten angemessen durch Verschlüsselung geschützt werden.&lt;br /&gt;
# Sicherstellen, dass ausgelagerte Datensicherungen verschlüsselt sind und die Schlüssel getrennt verwaltet und gesichert werden.&lt;br /&gt;
# Sicherstellen, dass angemessene, starke Algorithmen und Schlüssel verwendet und verwaltet werden.&lt;br /&gt;
# Sicherstellen, dass Passwörter mit einem starken Algorithmus und einem angemessenen Salt gehasht werden.&lt;br /&gt;
# Sicherstellen, dass alle Schlüssel und Passwörter vor unberechtigtem Zugriff geschützt sind.&lt;br /&gt;
{{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=left|risk=6|year=2013}}&lt;br /&gt;
====temporär: Auszug aus [[Top_10_2013-A6-Sensitive_Data_Exposure| Top 10-2013 RC1: A6-Sensitive_Data_Exposure]]====&lt;br /&gt;
&amp;lt;u&amp;gt;Scenario #1:&amp;lt;/u&amp;gt; An application encrypts credit card numbers in a database using automatic database encryption. However, this means it also decrypts this data automatically when retrieved, allowing an SQL injection flaw to retrieve credit card numbers in clear text. The system should have encrypted the credit card numbers using a public key, and only allowed back-end applications to decrypt them with the private key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Scenario #2:&amp;lt;/u&amp;gt; A site simply doesn't use SSL for all authenticated pages. Attacker simply monitors network traffic (like an open wireless network), and steals the user’s session cookie. Attacker then replays this cookie and hijacks the user’s session, accessing all their private data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Scenario #3:&amp;lt;/u&amp;gt; The password database uses unsalted hashes to store everyone’s passwords. A file upload flaw allows an attacker to retrieve the password file. All the unsalted hashes can be exposed with a rainbow table of precalculated hashes.&lt;br /&gt;
{{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=6|year=2013}}&lt;br /&gt;
====temporär: Auszug aus [[Top_10_2013-A6-Sensitive_Data_Exposure| Top 10-2013 RC1: A6-Sensitive_Data_Exposure]]====&lt;br /&gt;
The full perils of unsafe cryptography, SSL usage, and data protection are well beyond the scope of the Top 10. That said, for all sensitive data, do all of the following, at a minimum:&lt;br /&gt;
# Considering the threats you plan to protect this data from (e.g., insider attack, external user), make sure you encrypt all sensitive data at rest and in transit in a manner that defends against these threats.&lt;br /&gt;
# Don’t store sensitive data unnecessarily. Discard it as soon as possible. Data you don’t have can’t be stolen.&lt;br /&gt;
# Ensure strong standard algorithms and strong keys are used, and proper key management is in place.&lt;br /&gt;
Ensure passwords are stored with an algorithm specifically designed for password protection, such as [http://en.wikipedia.org/wiki/Bcrypt  bcrypt], [http://en.wikipedia.org/wiki/PBKDF2  PBKDF2], or [http://en.wikipedia.org/wiki/Scrypt  scrypt].&lt;br /&gt;
# Disable autocomplete on forms collecting sensitive data and disable caching for pages displaying sensitive data.&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
= '''JAVA''' =  &lt;br /&gt;
&amp;lt;!-- z.Z ohne Template ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
Ein einfaches Beispiel für die Veschlüsselung von Texten, hier mit dem AES-128 Algorithmus. Die Auswahl an Verschlüsselungsparametern wie beispielsweise Algorithmus, Ciphermodus oder Schlüssellänge ist groß und kommt immer auf die jeweiligen Daten und die Anwendung an. &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
String plainText = &amp;quot;HelloWorld&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// password setzen &lt;br /&gt;
String password = &amp;quot;my128bitPassWord&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// CBC Cipher immer mit einem zufällig erzeugten &lt;br /&gt;
// Initialization Vector (IV) initialisieren (Länge 16 Byte)&lt;br /&gt;
byte[] ivBytes = new byte[16];&lt;br /&gt;
(new SecureRandom()).nextBytes(ivBytes);&lt;br /&gt;
&lt;br /&gt;
// den Schlüssel erzeugen&lt;br /&gt;
SecretKeySpec key = new SecretKeySpec(password.getBytes(), &amp;quot;AES&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// Container für die Verschlüsselungs Parameter&lt;br /&gt;
IvParameterSpec paramSpec = new IvParameterSpec(ivBytes); &lt;br /&gt;
&lt;br /&gt;
// Chiffrierer erzeugen und initialisieren&lt;br /&gt;
// Algorithmus: AES&lt;br /&gt;
// Modus: CBC&lt;br /&gt;
// Padding: PKCS5Padding&lt;br /&gt;
Cipher cipher = Cipher.getInstance(&amp;quot;AES/CBC/PKCS5Padding&amp;quot;);&lt;br /&gt;
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); &lt;br /&gt;
&lt;br /&gt;
// Verschlüsselung durchführen&lt;br /&gt;
byte[] encrypted = cipher.doFinal(plainText.getBytes());&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Benutzung der ESAPI erleichtert die Handhabung, da neben einer großen Bandbreite an Verschlüsselungs-, Hash-, und Signaturalgorithmen auch Methoden für die Schlüsselerzeugung- und verwaltung unterstüzt werden. Nach Initialisierung der Parameter in der Konfigurationsdatei ESAPI.properties, reduziert sich die eigentliche Verschlüsselung eines Textes beispielsweise zu:&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
CipherText ciphertext = &lt;br /&gt;
   ESAPI.encryptor().encrypt( new PlainText(myplaintext) );&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
Beispiele für das Hashen von Passwörtern. Um die Sicherheit zu erhöhen sollte jedes Passwort mit einem Zufallswert (Salt) berechnet und gespeichert werden sowie möglichst viele Iterationen beim Hashing genutzt werden.&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
String password = &amp;quot;mypassword&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// salt anlegen und mit zufälligen Bytes befüllen&lt;br /&gt;
byte[] salt = new byte[8];&lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
// Hash-Generator anlegen (verwendeter Algorithmus ist SHA-256)&lt;br /&gt;
// und mit salt initialisieren (=&amp;gt; höhere Sicherheit gegen Angriffe)&lt;br /&gt;
MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-256&amp;quot;);&lt;br /&gt;
digest.reset();&lt;br /&gt;
digest.update(salt);&lt;br /&gt;
&lt;br /&gt;
byte[] input = digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// Hash in mehreren Iterationen (n = 100.000) berechnen&lt;br /&gt;
// mehr Iterationen verlangsamen Angriffe (signifikant?)&lt;br /&gt;
for (int i = 0; i &amp;lt; 100000; i++) {&lt;br /&gt;
   digest.reset();&lt;br /&gt;
   input = digest.digest(input);&lt;br /&gt;
}&lt;br /&gt;
// am Ende der Iterationen enthält input den berechneten Hash&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sicherer ist allerdings die Nutzung einer PBKDF2 (Password-Based Key Derivation Function 2) wie im folgenden Beispiel: &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public byte[] generatePBKDF2Hash(String password) &lt;br /&gt;
   throws NoSuchAlgorithmException, InvalidKeySpecException {  &lt;br /&gt;
&lt;br /&gt;
	byte[] salt = new byte[20]; &lt;br /&gt;
	// salt mit zufälligen Bytes befüllen&lt;br /&gt;
	(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
	int iterations = 10000;&lt;br /&gt;
	int keyLength  = 160;&lt;br /&gt;
	// neuen Schlüssel erzeugen &lt;br /&gt;
	SecretKeyFactory factory = SecretKeyFactory.getInstance(&amp;quot;PBKDF2WithHmacSHA1&amp;quot;);&lt;br /&gt;
	PBEKeySpec pbeKeySpec = new PBEKeySpec(password, salt, iterations, keyLength);&lt;br /&gt;
        SecretKey mySecretKey = factory.generateSecret(pbeKeySpec);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
byte[] hash = generatePBKDF2Hash(password).getEncoded();&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine weiterer empfohlener Algorithmus ist bcrypt, hier bespielsweise unter Verwendung der jBCrypt-Bibliothek (siehe Referenzen).&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
String hashed = BCrypt.hashpw(password, BCrypt.gensalt(12));&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zu bcrypt gibt es mittlerweile eine noch sicherere Variante scrypt, der Link zu einer Beispielimplementierung findet sich bei den Referenzen.&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=3|risk=7|year=2010|language=de}}&lt;br /&gt;
Um geheime Schlüssel sicher, aber auch gleichzeitig einfach zugänglich und austauschbar aufzubewahren empfiehlt sich eine spezielle Schlüsseldatei, wie beispielweise der Java KeyStore. In dieser Datei werden die Schlüssel mit einem MasterKey gesichert, die Datei selbst sollte getrennt von den verschlüsselten Daten abgelegt werden:&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
// Erzeugung eines symmetrischen Schlüssels mittels der vorher beschriebenen PBKDF2&lt;br /&gt;
String password = &amp;quot;mypassword&amp;quot;;&lt;br /&gt;
byte[] mySecretKey = generatePBKDF2Hash(password);&lt;br /&gt;
&lt;br /&gt;
// neuen KeyStore für symmetrische Schlüssel erzeugen &lt;br /&gt;
KeyStore ks = KeyStore.getInstance(&amp;quot;JCEKS&amp;quot;);&lt;br /&gt;
ks.load(null, null);&lt;br /&gt;
&lt;br /&gt;
// Schlüssel speichern&lt;br /&gt;
KeyStore.ProtectionParameter passwordProtection = &lt;br /&gt;
     new KeyStore.PasswordProtection(password);&lt;br /&gt;
KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(mySecretKey);&lt;br /&gt;
ks.setEntry(&amp;quot;beispielkey&amp;quot;, entry, passwordProtection);&lt;br /&gt;
&lt;br /&gt;
// KeyStore in Datei speichern &lt;br /&gt;
FileOutputStream fos = new FileOutputStream(&amp;quot;SecretKeyStoreDatei&amp;quot;);&lt;br /&gt;
ks.store(fos,password);&lt;br /&gt;
fos.close();&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=1|risk=6|year=2013|language=de}}&lt;br /&gt;
;Unzureichende Absicherung der Transportschicht&lt;br /&gt;
&lt;br /&gt;
Um die Verschlüsselung auf der Transportebene sollte sich der Entwickler nie selbst kümmern, sondern dies immer dem Webserver überlassen:&lt;br /&gt;
&lt;br /&gt;
Im J2EE-Deployment-Descriptor der Anwendung (= web.xml) ist die folgende Konfiguration vorzunehmen, um sicherzustellen, dass nur ausschließlich über https kommuniziert wird:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;security-constraint&amp;gt;&lt;br /&gt;
   &amp;lt;web-resource-collection&amp;gt;&lt;br /&gt;
     &amp;lt;web-resource-name&amp;gt;Protected Context&amp;lt;/web-resource-name&amp;gt;&lt;br /&gt;
     &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
   &amp;lt;/web-resource-collection&amp;gt;&lt;br /&gt;
   &amp;lt;!-- auth-constraint an dieser Stelle für Authentisierung  --&amp;gt;&lt;br /&gt;
   &amp;lt;user-data-constraint&amp;gt;&lt;br /&gt;
      &amp;lt;transport-guarantee&amp;gt;CONFIDENTIAL&amp;lt;/transport-guarantee&amp;gt;&lt;br /&gt;
   &amp;lt;/user-data-constraint&amp;gt;&lt;br /&gt;
&amp;lt;/security-constraint&amp;gt;&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Session-Cookies ist immer das Attribute SECURE zu setzen:&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;session-config&amp;gt; &lt;br /&gt;
   &amp;lt;cookie-config&amp;gt; &lt;br /&gt;
      &amp;lt;secure&amp;gt;&lt;br /&gt;
         true&lt;br /&gt;
      &amp;lt;/secure&amp;gt; &lt;br /&gt;
   &amp;lt;/cookie-config&amp;gt; &lt;br /&gt;
&amp;lt;/session-config&amp;gt; &lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
In der Server-Configuration ist sicherzustellen, dass nur TLS und SSL3 unterstützt werden.&lt;br /&gt;
Das Speichern von vertraulichen Inhalten am Client oder auf einem Proxy kann über den Header Cache-Control verhindert werden:&lt;br /&gt;
&lt;br /&gt;
     Header set Cache-Control &amp;quot;no-cache, no store, must-revalidate&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Weitere Hinweise im [https://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet Transport Layer Protection Cheat Sheet]&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=1a|risk=9|year=2010|language=de}}&lt;br /&gt;
&lt;br /&gt;
Die Sicherheitskonfiguration unter Option 1 hat noch eine Schwachstelle, so das MITM (Man In The Middle attack) nicht zuverlässig verhindert wird. MITM erzeugt einen Zertifikatsfehler am Client, der üblicherweise aber (durch den Anwender) ignoriert wird. Deshalb wurde der HTTP-Header &amp;quot;HTTP Strict Transport Security (HSTS)&amp;quot; eingeführt. Damit werden kompatible Browser (Firefox, Chrome, Opera aber bisher NICHT IE) angewiesen, dass &lt;br /&gt;
* der Browser den http-Request ausschließlich über https verschickt (auch falls die Seite mit http aufgerufen wird).&lt;br /&gt;
* der Anwender Zertifikatsfehler im Browser nicht mehr ignorieren kann.&lt;br /&gt;
&lt;br /&gt;
Konfiguration im Apache:&lt;br /&gt;
     Header set Strict-Transport-Security &amp;quot;max-age=16070400; includeSubDomains&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Da der HSTS-Header nur über https übermittelt wird ist zusätzlich ein Redirect nötig:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
       ServerAlias *&lt;br /&gt;
       RewriteEngine On&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [redirect=301]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quellen: &lt;br /&gt;
&lt;br /&gt;
[https://www.owasp.org/index.php/HTTP_Strict_Transport_Security HTTP_Strict_Transport_Security ]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=zEV3HOuM_Vw&amp;amp;feature=youtube_gdata AppSecTutorial Series - Episode 4]&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Überblick über die Anforderungen und die hierbei zu vermeidenden Probleme gibt es unter [http://www.owasp.org/index.php/ASVS#tab=ASVS ASVS requirements on Cryptography (V7)]. Des Weiteren:&lt;br /&gt;
* [[Top_10_2007-Insecure_Cryptographic_Storage | OWASP Top 10-2007 on Insecure Cryptographic Storage]]&lt;br /&gt;
* [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encryptor.html ESAPI Encryptor API]&lt;br /&gt;
* [http://www.owasp.org/index.php/Guide_to_Cryptography#Insecure_transmission_of_secrets OWASP Development Guide: Chapter on Cryptography]&lt;br /&gt;
* [[Codereview-Cryptography | OWASP Code Review Guide: Chapter on Cryptography]]&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubSubsectionExternalReferencesTemplate|language=de}}&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/310.html CWE Entry 310 on Cryptographic Issues]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/312.html CWE Entry 312 on Cleartext Storage of Sensitive Information]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/326.html CWE Entry 326 on Weak Encryption]&lt;br /&gt;
* [http://www.mindrot.org/projects/jBCrypt Reine Java Implementierung von BCrypt]&lt;br /&gt;
* [https://github.com/wg/scrypt Beispielimplementierung von SCrypt]&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''Test''' =&lt;br /&gt;
&amp;lt;!-- weitere Programmiersprachen oder evtl Anti-Beispiele ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=|risk=7|year=2010|language=de}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=7|year=2010|language=de}}&lt;br /&gt;
(ganze Breite)&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:BottomAdvancedTemplate&lt;br /&gt;
    |type=0&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Top 10 fuer Entwickler]]&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=155054</id>
		<title>Germany/Projekte/Top 10 fuer Entwickler-2013/A6-Verlust der Vertraulichkeit sensibler Daten</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=155054"/>
				<updated>2013-07-04T11:40:36Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top_10_2010_Developer_Edition_De:TopTemplate&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
== Seite in Bearbeitung (BAUSTELLE!!) ==&lt;br /&gt;
&lt;br /&gt;
== A7 Kryptografisch unsichere Speicherung == &lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SummaryTableHeaderBeginTemplate|year=2010|language=de}}&lt;br /&gt;
  {{Top_10:SummaryTableTemplate|exploitability=3|prevalence=3|detectability=2|impact=1|language=de|year=2013}}&lt;br /&gt;
{{Top_10_2010:SummaryTableHeaderEndTemplate}}&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Jeder Benutzer des Systems ist zu betrachten.&lt;br /&gt;
Haben diese ein Interesse, auf geschützte Daten unberechtigt zuzugreifen?&lt;br /&gt;
Wie steht es um Administratoren?&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Angreifer brechen üblicherweise nicht die eigentliche Kryptografie. Statt dessen finden Sie Schlüssel, Klartexte oder greifen über Kanäle mit automatischer Entschlüsselung auf Daten zu.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td colspan=2  {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehlende Verschlüsselung vertraulicher Daten ist die häufigste Schwachstelle, gefolgt von unsicherer Schlüsselerzeugung, der Speicherung statischer Schlüssel und die Nutzung schwacher Algorithmen. Schwache Hashwerte ohne Salt kommen zum Passwortschutz oft vor. Ein eingeschränkter Zugriff lässt externe Angreifer solche Probleme i.d.R. nicht leicht entdecken. Den nötigen Zugriff müssen sie vorher auf andere Weise erlangen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehler kompromittieren regelmäßig vertrauliche Daten. Es handelt sich hierbei oft um sensitive Daten wie personenbezogene Daten, Benutzernamen und Passwörter oder Kreditkarteninformationen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Betrachten Sie den Wert verlorener Daten und die Auswirkungen auf die Reputation des betroffenen Unternehmens. Hat es ggf. auch juristische Konsequenzen, wenn die Daten bekannt werden?&amp;lt;/td&amp;gt;&lt;br /&gt;
{{Top_10_2010:SummaryTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=main}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=firstLeft|risk=7|year=2010|language=de}}  &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 1&amp;lt;/u&amp;gt;''': Eine Anwendung speichert verschlüsselt Kreditkartendaten in einer Datenbank, um Sie vor Angreifern zu schützen. Die Datenbank ist so eingerichtet, dass die Daten beim Auslesen automatisch entschlüsselt werden. Durch SQL-Injection können in diesem Fall alle Kreditkartendaten im Klartext ausgelesen werden. Das System hätte so konfiguriert sein sollen, dass nur nachgelagerte Anwendungen und nicht die Webanwendung selbst entschlüsseln dürfen.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 2&amp;lt;/u&amp;gt;''': Ein Datensicherungsband speichert verschlüsselte Gesundheitsdaten, aber der Schlüssel ist ebenfalls dort gespeichert. Das Band geht auf dem Transportweg verloren.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 3&amp;lt;/u&amp;gt;''': Die Passwortdatenbank benutzt Hashwerte ohne Salt zur Speicherung der Passwörter. Eine Schwachstelle in der Downloadfunktion ermöglicht einem Angreifer den Zugriff auf die Datei. Zu allen Hashes kann in vier Wochen ein passender Klartext gefunden werden. Bei starken Hashwerten mit Salt hätte dieser Angriff über 3000 Jahre gedauert.&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=7|year=2010|language=de}} &lt;br /&gt;
Eine Übersicht über alle Tücken unsicherer Kryptografie liegt weit außerhalb des Rahmens der Top 10. Für alle vertraulichen Daten sollten Sie zumindest:&lt;br /&gt;
# Die Bedrohungen betrachten, vor denen Sie die Daten schützen wollen (z. B. Innen- und Außentäter) und sicherstellen, dass diese Daten angemessen durch Verschlüsselung geschützt werden.&lt;br /&gt;
# Sicherstellen, dass ausgelagerte Datensicherungen verschlüsselt sind und die Schlüssel getrennt verwaltet und gesichert werden.&lt;br /&gt;
# Sicherstellen, dass angemessene, starke Algorithmen und Schlüssel verwendet und verwaltet werden.&lt;br /&gt;
# Sicherstellen, dass Passwörter mit einem starken Algorithmus und einem angemessenen Salt gehasht werden.&lt;br /&gt;
# Sicherstellen, dass alle Schlüssel und Passwörter vor unberechtigtem Zugriff geschützt sind.&lt;br /&gt;
{{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=left|risk=6|year=2013}}&lt;br /&gt;
====temporär: Auszug aus [[Top_10_2013-A6-Sensitive_Data_Exposure| Top 10-2013 RC1: A6-Sensitive_Data_Exposure]]====&lt;br /&gt;
&amp;lt;u&amp;gt;Scenario #1:&amp;lt;/u&amp;gt; An application encrypts credit card numbers in a database using automatic database encryption. However, this means it also decrypts this data automatically when retrieved, allowing an SQL injection flaw to retrieve credit card numbers in clear text. The system should have encrypted the credit card numbers using a public key, and only allowed back-end applications to decrypt them with the private key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Scenario #2:&amp;lt;/u&amp;gt; A site simply doesn't use SSL for all authenticated pages. Attacker simply monitors network traffic (like an open wireless network), and steals the user’s session cookie. Attacker then replays this cookie and hijacks the user’s session, accessing all their private data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Scenario #3:&amp;lt;/u&amp;gt; The password database uses unsalted hashes to store everyone’s passwords. A file upload flaw allows an attacker to retrieve the password file. All the unsalted hashes can be exposed with a rainbow table of precalculated hashes.&lt;br /&gt;
{{Top_10_2010:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=6|year=2013}}&lt;br /&gt;
====temporär: Auszug aus [[Top_10_2013-A6-Sensitive_Data_Exposure| Top 10-2013 RC1: A6-Sensitive_Data_Exposure]]====&lt;br /&gt;
The full perils of unsafe cryptography, SSL usage, and data protection are well beyond the scope of the Top 10. That said, for all sensitive data, do all of the following, at a minimum:&lt;br /&gt;
# Considering the threats you plan to protect this data from (e.g., insider attack, external user), make sure you encrypt all sensitive data at rest and in transit in a manner that defends against these threats.&lt;br /&gt;
# Don’t store sensitive data unnecessarily. Discard it as soon as possible. Data you don’t have can’t be stolen.&lt;br /&gt;
# Ensure strong standard algorithms and strong keys are used, and proper key management is in place.&lt;br /&gt;
Ensure passwords are stored with an algorithm specifically designed for password protection, such as [http://en.wikipedia.org/wiki/Bcrypt  bcrypt], [http://en.wikipedia.org/wiki/PBKDF2  PBKDF2], or [http://en.wikipedia.org/wiki/Scrypt  scrypt].&lt;br /&gt;
# Disable autocomplete on forms collecting sensitive data and disable caching for pages displaying sensitive data.&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
= '''JAVA''' =  &lt;br /&gt;
&amp;lt;!-- z.Z ohne Template ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
Ein einfaches Beispiel für die Veschlüsselung von Texten, hier mit dem AES-128 Algorithmus. Die Auswahl an Verschlüsselungsparametern wie beispielsweise Algorithmus, Ciphermodus oder Schlüssellänge ist groß und kommt immer auf die jeweiligen Daten und die Anwendung an. &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
// master key und &lt;br /&gt;
String masterKey = &amp;quot;My128bitMastrKey&amp;quot;;&lt;br /&gt;
String plainText = &amp;quot;HelloWorld&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// CBC Cipher immer mit einem zufällig erzeugten &lt;br /&gt;
// Initialization Vector (IV) initialisieren (Länge 16 Byte)&lt;br /&gt;
byte[] ivBytes = new byte[16];&lt;br /&gt;
(new SecureRandom()).nextBytes(ivBytes);&lt;br /&gt;
&lt;br /&gt;
// den Schlüssel erzeugen&lt;br /&gt;
SecretKeySpec key = new SecretKeySpec(masterKey.getBytes(), &amp;quot;AES&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// Container für die Verschlüsselungs Parameter&lt;br /&gt;
IvParameterSpec paramSpec = new IvParameterSpec(ivBytes); &lt;br /&gt;
&lt;br /&gt;
// Chiffrierer erzeugen und initialisieren&lt;br /&gt;
// Algorithmus: AES&lt;br /&gt;
// Modus: CBC&lt;br /&gt;
// Padding: PKCS5Padding&lt;br /&gt;
Cipher cipher = Cipher.getInstance(&amp;quot;AES/CBC/PKCS5Padding&amp;quot;);&lt;br /&gt;
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); &lt;br /&gt;
&lt;br /&gt;
// Verschlüsselung durchführen&lt;br /&gt;
byte[] encrypted = cipher.doFinal(plainText.getBytes());&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Benutzung der ESAPI erleichtert die Handhabung, da neben einer großen Bandbreite an Verschlüsselungs-, Hash-, und Signaturalgorithmen auch Methoden für die Schlüsselerzeugung- und verwaltung unterstüzt werden. Nach Initialisierung der Parameter in der Konfigurationsdatei ESAPI.properties, reduziert sich die eigentliche Verschlüsselung eines Textes beispielsweise zu:&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
CipherText ciphertext = &lt;br /&gt;
   ESAPI.encryptor().encrypt( new PlainText(myplaintext) );&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
Beispiele für das Hashen von Passwörtern. Um die Sicherheit zu erhöhen sollte jedes Passwort mit einem Zufallswert (Salt) berechnet und gespeichert werden sowie möglichst viele Iterationen beim Hashing genutzt werden.&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
String password = &amp;quot;mypassword&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// salt anlegen und mit zufälligen Bytes befüllen&lt;br /&gt;
byte[] salt = new byte[8];&lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
// Hash-Generator anlegen (verwendeter Algorithmus ist SHA-256)&lt;br /&gt;
// und mit salt initialisieren (=&amp;gt; höhere Sicherheit gegen Angriffe)&lt;br /&gt;
MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-256&amp;quot;);&lt;br /&gt;
digest.reset();&lt;br /&gt;
digest.update(salt);&lt;br /&gt;
&lt;br /&gt;
byte[] input = digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// Hash in mehreren Iterationen (n = 100.000) berechnen&lt;br /&gt;
// mehr Iterationen verlangsamen Angriffe (signifikant?)&lt;br /&gt;
for (int i = 0; i &amp;lt; 100000; i++) {&lt;br /&gt;
   digest.reset();&lt;br /&gt;
   input = digest.digest(input);&lt;br /&gt;
}&lt;br /&gt;
// am Ende der Iterationen enthält input den berechneten Hash&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sicherer ist allerdings die Nutzung einer PBKDF2 (Password-Based Key Derivation Function 2) wie im folgenden Beispiel: &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public byte[] generatePBKDF2Hash(String password) &lt;br /&gt;
   throws NoSuchAlgorithmException, InvalidKeySpecException {  &lt;br /&gt;
&lt;br /&gt;
	byte[] salt = new byte[20]; &lt;br /&gt;
	// salt mit zufälligen Bytes befüllen&lt;br /&gt;
	(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
	int iterations = 10000;&lt;br /&gt;
	int keyLength  = 160;&lt;br /&gt;
	// neuen Schlüssel erzeugen &lt;br /&gt;
	SecretKeyFactory factory = SecretKeyFactory.getInstance(&amp;quot;PBKDF2WithHmacSHA1&amp;quot;);&lt;br /&gt;
	PBEKeySpec pbeKeySpec = new PBEKeySpec(password, salt, iterations, keyLength);&lt;br /&gt;
        SecretKey mySecretKey = factory.generateSecret(pbeKeySpec);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
byte[] hash = generatePBKDF2Hash(password).getEncoded();&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine weiterer empfohlener Algorithmus ist bcrypt, hier bespielsweise unter Verwendung der jBCrypt-Bibliothek (siehe Referenzen).&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
String hashed = BCrypt.hashpw(password, BCrypt.gensalt(12));&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zu bcrypt gibt es mittlerweile eine noch sicherere Variante scrypt, der Link zu einer Referenzimplementierung findet sich bei den Referenzen.&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
Um geheime Schlüssel sicher, aber auch gleichzeitig einfach zugänglich und austauschbar aufzubewahren empfiehlt sich eine spezielle Schlüsseldatei, wie beispielweise der Java KeyStore. In dieser Datei werden die Schlüssel mit einem MasterKey gesichert, die Datei selbst sollte getrennt von den verschlüsselten Daten abgelegt werden:&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
// Erzeugung eines symmetrischen Schlüssels mittels der vorher beschriebenen PBKDF2&lt;br /&gt;
String password = &amp;quot;mypassword&amp;quot;;&lt;br /&gt;
byte[] mySecretKey = generatePBKDF2Hash(password);&lt;br /&gt;
&lt;br /&gt;
// neuen KeyStore für symmetrische Schlüssel erzeugen &lt;br /&gt;
KeyStore ks = KeyStore.getInstance(&amp;quot;JCEKS&amp;quot;);&lt;br /&gt;
ks.load(null, null);&lt;br /&gt;
&lt;br /&gt;
// Schlüssel speichern&lt;br /&gt;
KeyStore.ProtectionParameter passwordProtection = &lt;br /&gt;
     new KeyStore.PasswordProtection(password);&lt;br /&gt;
KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(mySecretKey);&lt;br /&gt;
ks.setEntry(&amp;quot;beispielkey&amp;quot;, entry, passwordProtection);&lt;br /&gt;
&lt;br /&gt;
// KeyStore in Datei speichern &lt;br /&gt;
FileOutputStream fos = new FileOutputStream(&amp;quot;SecretKeyStoreDatei&amp;quot;);&lt;br /&gt;
ks.store(fos,password);&lt;br /&gt;
fos.close();&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=1|risk=6|year=2013|language=de}}&lt;br /&gt;
;Unzureichende Absicherung der Transportschicht&lt;br /&gt;
&lt;br /&gt;
Um die Verschlüsselung auf der Transportebene sollte sich der Entwickler nie selbst kümmern, sondern dies immer dem Webserver überlassen:&lt;br /&gt;
&lt;br /&gt;
Im J2EE-Deployment-Descriptor der Anwendung (= web.xml) ist die folgende Konfiguration vorzunehmen, um sicherzustellen, dass nur ausschließlich über https kommuniziert wird:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;security-constraint&amp;gt;&lt;br /&gt;
   &amp;lt;web-resource-collection&amp;gt;&lt;br /&gt;
     &amp;lt;web-resource-name&amp;gt;Protected Context&amp;lt;/web-resource-name&amp;gt;&lt;br /&gt;
     &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
   &amp;lt;/web-resource-collection&amp;gt;&lt;br /&gt;
   &amp;lt;!-- auth-constraint an dieser Stelle für Authentisierung  --&amp;gt;&lt;br /&gt;
   &amp;lt;user-data-constraint&amp;gt;&lt;br /&gt;
      &amp;lt;transport-guarantee&amp;gt;CONFIDENTIAL&amp;lt;/transport-guarantee&amp;gt;&lt;br /&gt;
   &amp;lt;/user-data-constraint&amp;gt;&lt;br /&gt;
&amp;lt;/security-constraint&amp;gt;&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Session-Cookies ist immer das Attribute SECURE zu setzen:&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;session-config&amp;gt; &lt;br /&gt;
   &amp;lt;cookie-config&amp;gt; &lt;br /&gt;
      &amp;lt;secure&amp;gt;&lt;br /&gt;
         true&lt;br /&gt;
      &amp;lt;/secure&amp;gt; &lt;br /&gt;
   &amp;lt;/cookie-config&amp;gt; &lt;br /&gt;
&amp;lt;/session-config&amp;gt; &lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
In der Server-Configuration ist sicherzustellen, dass nur TLS und SSL3 unterstützt werden.&lt;br /&gt;
Das Speichern von vertraulichen Inhalten am Client oder auf einem Proxy kann über den Header Cache-Control verhindert werden:&lt;br /&gt;
&lt;br /&gt;
     Header set Cache-Control &amp;quot;no-cache, no store, must-revalidate&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Weitere Hinweise im [https://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet Transport Layer Protection Cheat Sheet]&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=1a|risk=9|year=2010|language=de}}&lt;br /&gt;
&lt;br /&gt;
Die Sicherheitskonfiguration unter Option 1 hat noch eine Schwachstelle, so das MITM (Man In The Middle attack) nicht zuverlässig verhindert wird. MITM erzeugt einen Zertifikatsfehler am Client, der üblicherweise aber (durch den Anwender) ignoriert wird. Deshalb wurde der HTTP-Header &amp;quot;HTTP Strict Transport Security (HSTS)&amp;quot; eingeführt. Damit werden kompatible Browser (Firefox, Chrome, Opera aber bisher NICHT IE) angewiesen, dass &lt;br /&gt;
* der Browser den http-Request ausschließlich über https verschickt (auch falls die Seite mit http aufgerufen wird).&lt;br /&gt;
* der Anwender Zertifikatsfehler im Browser nicht mehr ignorieren kann.&lt;br /&gt;
&lt;br /&gt;
Konfiguration im Apache:&lt;br /&gt;
     Header set Strict-Transport-Security &amp;quot;max-age=16070400; includeSubDomains&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Da der HSTS-Header nur über https übermittelt wird ist zusätzlich ein Redirect nötig:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
       ServerAlias *&lt;br /&gt;
       RewriteEngine On&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [redirect=301]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quellen: &lt;br /&gt;
&lt;br /&gt;
[https://www.owasp.org/index.php/HTTP_Strict_Transport_Security HTTP_Strict_Transport_Security ]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=zEV3HOuM_Vw&amp;amp;feature=youtube_gdata AppSecTutorial Series - Episode 4]&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Überblick über die Anforderungen und die hierbei zu vermeidenden Probleme gibt es unter [http://www.owasp.org/index.php/ASVS#tab=ASVS ASVS requirements on Cryptography (V7)]. Des Weiteren:&lt;br /&gt;
* [[Top_10_2007-Insecure_Cryptographic_Storage | OWASP Top 10-2007 on Insecure Cryptographic Storage]]&lt;br /&gt;
* [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encryptor.html ESAPI Encryptor API]&lt;br /&gt;
* [http://www.owasp.org/index.php/Guide_to_Cryptography#Insecure_transmission_of_secrets OWASP Development Guide: Chapter on Cryptography]&lt;br /&gt;
* [[Codereview-Cryptography | OWASP Code Review Guide: Chapter on Cryptography]]&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubSubsectionExternalReferencesTemplate|language=de}}&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/310.html CWE Entry 310 on Cryptographic Issues]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/312.html CWE Entry 312 on Cleartext Storage of Sensitive Information]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/326.html CWE Entry 326 on Weak Encryption]&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''Test''' =&lt;br /&gt;
&amp;lt;!-- weitere Programmiersprachen oder evtl Anti-Beispiele ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=|risk=7|year=2010|language=de}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=7|year=2010|language=de}}&lt;br /&gt;
(ganze Breite)&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:BottomAdvancedTemplate&lt;br /&gt;
    |type=0&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Top 10 fuer Entwickler]]&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=150254</id>
		<title>Germany/Projekte/Top 10 fuer Entwickler-2013/A6-Verlust der Vertraulichkeit sensibler Daten</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=150254"/>
				<updated>2013-04-22T11:02:41Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top_10_2010_Developer_Edition_De:TopTemplate&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
== Seite in Bearbeitung (BAUSTELLE!!) ==&lt;br /&gt;
&lt;br /&gt;
== A7 Kryptografisch unsichere Speicherung == &lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SummaryTableHeaderBeginTemplate|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Ausnutzbarkeit|SCHWIERIG}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Verbreitung|SELTEN}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Auffindbarkeit|SCHWIERIG}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-1-Template|Auswirkung|SCHWERWIEGEND}}&lt;br /&gt;
{{Top_10_2010:SummaryTableHeaderEndTemplate}}&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Jeder Benutzer des Systems ist zu betrachten.&lt;br /&gt;
Haben diese ein Interesse, auf geschützte Daten unberechtigt zuzugreifen?&lt;br /&gt;
Wie steht es um Administratoren?&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Angreifer brechen üblicherweise nicht die eigentliche Kryptografie. Statt dessen finden Sie Schlüssel, Klartexte oder greifen über Kanäle mit automatischer Entschlüsselung auf Daten zu.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td colspan=2  {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehlende Verschlüsselung vertraulicher Daten ist die häufigste Schwachstelle, gefolgt von unsicherer Schlüsselerzeugung, der Speicherung statischer Schlüssel und die Nutzung schwacher Algorithmen. Schwache Hashwerte ohne Salt kommen zum Passwortschutz oft vor. Ein eingeschränkter Zugriff lässt externe Angreifer solche Probleme i.d.R. nicht leicht entdecken. Den nötigen Zugriff müssen sie vorher auf andere Weise erlangen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehler kompromittieren regelmäßig vertrauliche Daten. Es handelt sich hierbei oft um sensitive Daten wie personenbezogene Daten, Benutzernamen und Passwörter oder Kreditkarteninformationen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Betrachten Sie den Wert verlorener Daten und die Auswirkungen auf die Reputation des betroffenen Unternehmens. Hat es ggf. auch juristische Konsequenzen, wenn die Daten bekannt werden?&amp;lt;/td&amp;gt;&lt;br /&gt;
{{Top_10_2010:SummaryTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=main}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=firstLeft|risk=7|year=2010|language=de}}  &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 1&amp;lt;/u&amp;gt;''': Eine Anwendung speichert verschlüsselt Kreditkartendaten in einer Datenbank, um Sie vor Angreifern zu schützen. Die Datenbank ist so eingerichtet, dass die Daten beim Auslesen automatisch entschlüsselt werden. Durch SQL-Injection können in diesem Fall alle Kreditkartendaten im Klartext ausgelesen werden. Das System hätte so konfiguriert sein sollen, dass nur nachgelagerte Anwendungen und nicht die Webanwendung selbst entschlüsseln dürfen.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 2&amp;lt;/u&amp;gt;''': Ein Datensicherungsband speichert verschlüsselte Gesundheitsdaten, aber der Schlüssel ist ebenfalls dort gespeichert. Das Band geht auf dem Transportweg verloren.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 3&amp;lt;/u&amp;gt;''': Die Passwortdatenbank benutzt Hashwerte ohne Salt zur Speicherung der Passwörter. Eine Schwachstelle in der Downloadfunktion ermöglicht einem Angreifer den Zugriff auf die Datei. Zu allen Hashes kann in vier Wochen ein passender Klartext gefunden werden. Bei starken Hashwerten mit Salt hätte dieser Angriff über 3000 Jahre gedauert.&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=7|year=2010|language=de}} &lt;br /&gt;
Eine Übersicht über alle Tücken unsicherer Kryptografie liegt weit außerhalb des Rahmens der Top 10. Für alle vertraulichen Daten sollten Sie zumindest:&lt;br /&gt;
# Die Bedrohungen betrachten, vor denen Sie die Daten schützen wollen (z. B. Innen- und Außentäter) und sicherstellen, dass diese Daten angemessen durch Verschlüsselung geschützt werden.&lt;br /&gt;
# Sicherstellen, dass ausgelagerte Datensicherungen verschlüsselt sind und die Schlüssel getrennt verwaltet und gesichert werden.&lt;br /&gt;
# Sicherstellen, dass angemessene, starke Algorithmen und Schlüssel verwendet und verwaltet werden.&lt;br /&gt;
# Sicherstellen, dass Passwörter mit einem starken Algorithmus und einem angemessenen Salt gehasht werden.&lt;br /&gt;
# Sicherstellen, dass alle Schlüssel und Passwörter vor unberechtigtem Zugriff geschützt sind.&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''JAVA''' =  &lt;br /&gt;
&amp;lt;!-- z.Z ohne Template ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
Beispiel für das sichere Hashen von Passwörtern. Um die Sicherheit zu erhöhen sollte jedes Passwort mit einem Zufallswert (Salt) berechnet und möglichst viele Iterationen beim Hashing genutzt werden.&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''Geheime Schlüssel sollten natürlich nicht wie im Beispiel im Quellcode stehen.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
String password = &amp;quot;Password&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// salt anlegen und mit zufälligen Bytes befüllen&lt;br /&gt;
byte[] salt = new byte[8];&lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
// Hash-Generator anlegen (verwendeter Algorithmus ist SHA-256)&lt;br /&gt;
// und mit salt initialisieren (=&amp;gt; höhere Sicherheit gegen Angriffe)&lt;br /&gt;
MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-256&amp;quot;);&lt;br /&gt;
digest.reset();&lt;br /&gt;
digest.update(salt);&lt;br /&gt;
&lt;br /&gt;
byte[] input = digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// Hash in mehreren Iterationen (n = 100.000) berechnen&lt;br /&gt;
// mehr Iterationen verlangsamen Angriffe (signifikant?)&lt;br /&gt;
for (int i = 0; i &amp;lt; 100000; i++) {&lt;br /&gt;
   digest.reset();&lt;br /&gt;
   input = digest.digest(input);&lt;br /&gt;
}&lt;br /&gt;
// am Ende der Iterationen enthält input den berechneten Hash&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dies ist ein einfaches Beispiel für die Veschlüsselung von Texten, hier mit dem AES-128 Algorithmus. Die Auswahl an Verschlüsselungsparametern wie beispielsweise Algorithmus, Ciphermodus oder Schlüssellänge ist groß. Bei der Wahl der Parameter kommt es dabei immer auf die jeweiligen Daten und die Anwendung an. &lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''Geheime Schlüssel sollten natürlich nicht wie im Beispiel im Quellcode stehen.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
// CBC Cipher immer mit einem zufällig erzeugten Initialization Vector (IV) initialisieren (Länge 16 Byte)&lt;br /&gt;
byte[] ivBytes = new byte[16];&lt;br /&gt;
(new SecureRandom()).nextBytes(ivBytes);&lt;br /&gt;
&lt;br /&gt;
// den Schlüssel erzeugen&lt;br /&gt;
SecretKeySpec key = new SecretKeySpec(&amp;quot;My128bitMastrKey&amp;quot;.getBytes(), &amp;quot;AES&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// Container für die Verschlüsselungs Parameter&lt;br /&gt;
IvParameterSpec paramSpec = new IvParameterSpec(ivBytes); &lt;br /&gt;
&lt;br /&gt;
// Chiffrierer erzeugen und initialisieren&lt;br /&gt;
// Algorithmus: AES&lt;br /&gt;
// Modus: CBC&lt;br /&gt;
// Padding: PKCS5Padding&lt;br /&gt;
Cipher cipher = Cipher.getInstance(&amp;quot;AES/CBC/PKCS5Padding&amp;quot;);&lt;br /&gt;
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); &lt;br /&gt;
&lt;br /&gt;
// Verschlüsselung durchführen&lt;br /&gt;
byte[] encrypted = cipher.doFinal(plainText.getBytes());&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
Geheime Schlüssel sollten natürlich nicht wie im nebenstehenden Beispiel im Quellcode stehen. Um Schlüssel sicher, aber auch gleichzeitig einfach zugänglich und austauschbar aufzubewahren empfiehlt sich eine spezielle Schlüsseldatei, wie beispielweise der Java KeyStore. In dieser Datei werden die Schlüssel mit einem MasterKey gesichert, die Datei selbst sollte getrennt von den verschlüsselten Daten abgelegt werden:&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
char[] password = getMasterKey(); &lt;br /&gt;
byte[] salt = new byte[20]; &lt;br /&gt;
// salt mit zufälligen Bytes befüllen&lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
// neuen Schlüssel erzeugen &lt;br /&gt;
SecretKeyFactory factory = SecretKeyFactory.getInstance(&amp;quot;PBKDF2WithHmacSHA1&amp;quot;);&lt;br /&gt;
PBEKeySpec pbeKeySpec = new PBEKeySpec(password, salt, 1000, 128);&lt;br /&gt;
SecretKey mySecretKey = factory.generateSecret(pbeKeySpec);&lt;br /&gt;
&lt;br /&gt;
// neuen KeyStore für symmetrische Schlüssel erzeugen &lt;br /&gt;
KeyStore ks = KeyStore.getInstance(&amp;quot;JCEKS&amp;quot;);&lt;br /&gt;
ks.load(null, null);&lt;br /&gt;
&lt;br /&gt;
// Schlüssel speichern&lt;br /&gt;
KeyStore.ProtectionParameter passwordProtection = &lt;br /&gt;
     new KeyStore.PasswordProtection(password);&lt;br /&gt;
KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(mySecretKey);&lt;br /&gt;
ks.setEntry(&amp;quot;beispielkey&amp;quot;, entry, passwordProtection);&lt;br /&gt;
&lt;br /&gt;
// KeyStore in Datei speichern &lt;br /&gt;
FileOutputStream fos = new FileOutputStream(&amp;quot;SecretKeyStoreDatei&amp;quot;);&lt;br /&gt;
ks.store(fos,password);&lt;br /&gt;
fos.close();&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=3|risk=7|year=2010|language=de}}&lt;br /&gt;
Grundsätzlich gibt es bei der Verschlüsselung immer viele Wahlmöglichkeiten. Die Benutzung der ESAPI erleichtert die Handhabung ungemein, da neben einer großen Bandbreite an Verschlüsselungs-, Hash-, und Signaturalgorithmen auch Methoden für die Schlüsselerzeugung- und verwaltung unterstüzt werden. Die Verschlüsselung eines Textes beispielsweise reduziert sich dann zu:&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
CipherText ciphertext = ESAPI.encryptor().encrypt( new PlainText(myplaintext) );&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Überblick über die Anforderungen und die hierbei zu vermeidenden Probleme gibt es unter [http://www.owasp.org/index.php/ASVS#tab=ASVS ASVS requirements on Cryptography (V7)]. Des Weiteren:&lt;br /&gt;
* [[Top_10_2007-Insecure_Cryptographic_Storage | OWASP Top 10-2007 on Insecure Cryptographic Storage]]&lt;br /&gt;
* [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encryptor.html ESAPI Encryptor API]&lt;br /&gt;
* [http://www.owasp.org/index.php/Guide_to_Cryptography#Insecure_transmission_of_secrets OWASP Development Guide: Chapter on Cryptography]&lt;br /&gt;
* [[Codereview-Cryptography | OWASP Code Review Guide: Chapter on Cryptography]]&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubSubsectionExternalReferencesTemplate|language=de}}&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/310.html CWE Entry 310 on Cryptographic Issues]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/312.html CWE Entry 312 on Cleartext Storage of Sensitive Information]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/326.html CWE Entry 326 on Weak Encryption]&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''Test''' =&lt;br /&gt;
&amp;lt;!-- weitere Programmiersprachen oder evtl Anti-Beispiele ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=|risk=7|year=2010|language=de}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=7|year=2010|language=de}}&lt;br /&gt;
(ganze Breite)&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:BottomAdvancedTemplate&lt;br /&gt;
    |type=0&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Top 10 fuer Entwickler]]&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=150253</id>
		<title>Germany/Projekte/Top 10 fuer Entwickler-2013/A6-Verlust der Vertraulichkeit sensibler Daten</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=150253"/>
				<updated>2013-04-22T11:01:12Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top_10_2010_Developer_Edition_De:TopTemplate&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
== Seite in Bearbeitung (BAUSTELLE!!) ==&lt;br /&gt;
&lt;br /&gt;
== A7 Kryptografisch unsichere Speicherung == &lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SummaryTableHeaderBeginTemplate|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Ausnutzbarkeit|SCHWIERIG}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Verbreitung|SELTEN}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Auffindbarkeit|SCHWIERIG}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-1-Template|Auswirkung|SCHWERWIEGEND}}&lt;br /&gt;
{{Top_10_2010:SummaryTableHeaderEndTemplate}}&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Jeder Benutzer des Systems ist zu betrachten.&lt;br /&gt;
Haben diese ein Interesse, auf geschützte Daten unberechtigt zuzugreifen?&lt;br /&gt;
Wie steht es um Administratoren?&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Angreifer brechen üblicherweise nicht die eigentliche Kryptografie. Statt dessen finden Sie Schlüssel, Klartexte oder greifen über Kanäle mit automatischer Entschlüsselung auf Daten zu.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td colspan=2  {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehlende Verschlüsselung vertraulicher Daten ist die häufigste Schwachstelle, gefolgt von unsicherer Schlüsselerzeugung, der Speicherung statischer Schlüssel und die Nutzung schwacher Algorithmen. Schwache Hashwerte ohne Salt kommen zum Passwortschutz oft vor. Ein eingeschränkter Zugriff lässt externe Angreifer solche Probleme i.d.R. nicht leicht entdecken. Den nötigen Zugriff müssen sie vorher auf andere Weise erlangen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehler kompromittieren regelmäßig vertrauliche Daten. Es handelt sich hierbei oft um sensitive Daten wie personenbezogene Daten, Benutzernamen und Passwörter oder Kreditkarteninformationen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Betrachten Sie den Wert verlorener Daten und die Auswirkungen auf die Reputation des betroffenen Unternehmens. Hat es ggf. auch juristische Konsequenzen, wenn die Daten bekannt werden?&amp;lt;/td&amp;gt;&lt;br /&gt;
{{Top_10_2010:SummaryTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=main}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=firstLeft|risk=7|year=2010|language=de}}  &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 1&amp;lt;/u&amp;gt;''': Eine Anwendung speichert verschlüsselt Kreditkartendaten in einer Datenbank, um Sie vor Angreifern zu schützen. Die Datenbank ist so eingerichtet, dass die Daten beim Auslesen automatisch entschlüsselt werden. Durch SQL-Injection können in diesem Fall alle Kreditkartendaten im Klartext ausgelesen werden. Das System hätte so konfiguriert sein sollen, dass nur nachgelagerte Anwendungen und nicht die Webanwendung selbst entschlüsseln dürfen.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 2&amp;lt;/u&amp;gt;''': Ein Datensicherungsband speichert verschlüsselte Gesundheitsdaten, aber der Schlüssel ist ebenfalls dort gespeichert. Das Band geht auf dem Transportweg verloren.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 3&amp;lt;/u&amp;gt;''': Die Passwortdatenbank benutzt Hashwerte ohne Salt zur Speicherung der Passwörter. Eine Schwachstelle in der Downloadfunktion ermöglicht einem Angreifer den Zugriff auf die Datei. Zu allen Hashes kann in vier Wochen ein passender Klartext gefunden werden. Bei starken Hashwerten mit Salt hätte dieser Angriff über 3000 Jahre gedauert.&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=7|year=2010|language=de}} &lt;br /&gt;
Eine Übersicht über alle Tücken unsicherer Kryptografie liegt weit außerhalb des Rahmens der Top 10. Für alle vertraulichen Daten sollten Sie zumindest:&lt;br /&gt;
# Die Bedrohungen betrachten, vor denen Sie die Daten schützen wollen (z. B. Innen- und Außentäter) und sicherstellen, dass diese Daten angemessen durch Verschlüsselung geschützt werden.&lt;br /&gt;
# Sicherstellen, dass ausgelagerte Datensicherungen verschlüsselt sind und die Schlüssel getrennt verwaltet und gesichert werden.&lt;br /&gt;
# Sicherstellen, dass angemessene, starke Algorithmen und Schlüssel verwendet und verwaltet werden.&lt;br /&gt;
# Sicherstellen, dass Passwörter mit einem starken Algorithmus und einem angemessenen Salt gehasht werden.&lt;br /&gt;
# Sicherstellen, dass alle Schlüssel und Passwörter vor unberechtigtem Zugriff geschützt sind.&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''JAVA''' =  &lt;br /&gt;
&amp;lt;!-- z.Z ohne Template ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
Beispiel für das sichere Hashen von Passwörtern. Um die Sicherheit zu erhöhen sollte jedes Passwort mit einem Zufallswert (Salt) berechnet und möglichst viele Iterationen beim Hashing genutzt werden.&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''Geheime Schlüssel sollten natürlich nicht wie im Beispiel im Quellcode stehen.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
String password = &amp;quot;Password&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// salt anlegen und mit zufälligen Bytes befüllen&lt;br /&gt;
byte[] salt = new byte[8];&lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
// Hash-Generator anlegen (verwendeter Algorithmus ist SHA-256)&lt;br /&gt;
// und mit salt initialisieren (=&amp;gt; höhere Sicherheit gegen Angriffe)&lt;br /&gt;
MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-256&amp;quot;);&lt;br /&gt;
digest.reset();&lt;br /&gt;
digest.update(salt);&lt;br /&gt;
&lt;br /&gt;
byte[] input = digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// Hash in mehreren Iterationen (n = 100.000) berechnen&lt;br /&gt;
// mehr Iterationen verlangsamen Angriffe (signifikant?)&lt;br /&gt;
for (int i = 0; i &amp;lt; 100000; i++) {&lt;br /&gt;
   digest.reset();&lt;br /&gt;
   input = digest.digest(input);&lt;br /&gt;
}&lt;br /&gt;
// am Ende der Iterationen enthält input den berechneten Hash&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dies ist ein einfaches Beispiel für die Veschlüsselung von Texten, hier mit dem AES-128 Algorithmus. Die Auswahl an Verschlüsselungsparametern wie beispielsweise Algorithmus, Ciphermodus oder Schlüssellänge ist groß. Bei der Wahl der Parameter kommt es dabei immer auf die jeweiligen Daten und die Anwendung an. &lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''Geheime Schlüssel sollten natürlich nicht wie im Beispiel im Quellcode stehen.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
// CBC Cipher immer mit einem zufällig erzeugten Initialization Vector (IV) initialisiern (Länge 16 Byte)&lt;br /&gt;
byte[] ivBytes = new byte[16];&lt;br /&gt;
(new SecureRandom()).nextBytes(ivBytes);&lt;br /&gt;
&lt;br /&gt;
// den Schlüssel erzeugen&lt;br /&gt;
SecretKeySpec key = new SecretKeySpec(&amp;quot;My128bitMastrKey&amp;quot;.getBytes(), &amp;quot;AES&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// Container für die Verschlüsselungs Parameter&lt;br /&gt;
IvParameterSpec paramSpec = new IvParameterSpec(ivBytes); &lt;br /&gt;
&lt;br /&gt;
// Chiffrierer erzeugen und initialisieren&lt;br /&gt;
// Algorithmus: AES&lt;br /&gt;
// Modus: CBC&lt;br /&gt;
// Padding: PKCS5Padding&lt;br /&gt;
Cipher cipher = Cipher.getInstance(&amp;quot;AES/CBC/PKCS5Padding&amp;quot;);&lt;br /&gt;
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); &lt;br /&gt;
&lt;br /&gt;
// Verschlüsselung durchführen&lt;br /&gt;
byte[] encrypted = cipher.doFinal(plainText.getBytes());&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
Geheime Schlüssel sollten natürlich nicht wie im nebenstehenden Beispiel im Quellcode stehen. Um Schlüssel sicher, aber auch gleichzeitig einfach zugänglich und austauschbar aufzubewahren empfiehlt sich eine spezielle Schlüsseldatei, wie beispielweise der Java KeyStore. In dieser Datei werden die Schlüssel mit einem MasterKey gesichert, die Datei selbst sollte getrennt von den verschlüsselten Daten abgelegt werden:&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
char[] password = getMasterKey(); &lt;br /&gt;
byte[] salt = new byte[20]; &lt;br /&gt;
// salt mit zufälligen Bytes befüllen&lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
// neuen Schlüssel erzeugen &lt;br /&gt;
SecretKeyFactory factory = SecretKeyFactory.getInstance(&amp;quot;PBKDF2WithHmacSHA1&amp;quot;);&lt;br /&gt;
PBEKeySpec pbeKeySpec = new PBEKeySpec(password, salt, 1000, 128);&lt;br /&gt;
SecretKey mySecretKey = factory.generateSecret(pbeKeySpec);&lt;br /&gt;
&lt;br /&gt;
// neuen KeyStore für symmetrische Schlüssel erzeugen &lt;br /&gt;
KeyStore ks = KeyStore.getInstance(&amp;quot;JCEKS&amp;quot;);&lt;br /&gt;
ks.load(null, null);&lt;br /&gt;
&lt;br /&gt;
// Schlüssel speichern&lt;br /&gt;
KeyStore.ProtectionParameter passwordProtection = &lt;br /&gt;
     new KeyStore.PasswordProtection(password);&lt;br /&gt;
KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(mySecretKey);&lt;br /&gt;
ks.setEntry(&amp;quot;beispielkey&amp;quot;, entry, passwordProtection);&lt;br /&gt;
&lt;br /&gt;
// KeyStore in Datei speichern &lt;br /&gt;
FileOutputStream fos = new FileOutputStream(&amp;quot;SecretKeyStoreDatei&amp;quot;);&lt;br /&gt;
ks.store(fos,password);&lt;br /&gt;
fos.close();&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=3|risk=7|year=2010|language=de}}&lt;br /&gt;
Grundsätzlich gibt es bei der Verschlüsselung immer viele Wahlmöglichkeiten. Die Benutzung der ESAPI erleichtert die Handhabung ungemein, da neben einer großen Bandbreite an Verschlüsselungs-, Hash-, und Signaturalgorithmen auch Methoden für die Schlüsselerzeugung- und verwaltung unterstüzt werden. Die Verschlüsselung eines Textes beispielsweise reduziert sich dann zu:&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
CipherText ciphertext = ESAPI.encryptor().encrypt( new PlainText(myplaintext) );&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Überblick über die Anforderungen und die hierbei zu vermeidenden Probleme gibt es unter [http://www.owasp.org/index.php/ASVS#tab=ASVS ASVS requirements on Cryptography (V7)]. Des Weiteren:&lt;br /&gt;
* [[Top_10_2007-Insecure_Cryptographic_Storage | OWASP Top 10-2007 on Insecure Cryptographic Storage]]&lt;br /&gt;
* [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encryptor.html ESAPI Encryptor API]&lt;br /&gt;
* [http://www.owasp.org/index.php/Guide_to_Cryptography#Insecure_transmission_of_secrets OWASP Development Guide: Chapter on Cryptography]&lt;br /&gt;
* [[Codereview-Cryptography | OWASP Code Review Guide: Chapter on Cryptography]]&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubSubsectionExternalReferencesTemplate|language=de}}&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/310.html CWE Entry 310 on Cryptographic Issues]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/312.html CWE Entry 312 on Cleartext Storage of Sensitive Information]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/326.html CWE Entry 326 on Weak Encryption]&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''Test''' =&lt;br /&gt;
&amp;lt;!-- weitere Programmiersprachen oder evtl Anti-Beispiele ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=|risk=7|year=2010|language=de}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=7|year=2010|language=de}}&lt;br /&gt;
(ganze Breite)&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:BottomAdvancedTemplate&lt;br /&gt;
    |type=0&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Top 10 fuer Entwickler]]&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=150078</id>
		<title>Germany/Projekte/Top 10 fuer Entwickler-2013/A6-Verlust der Vertraulichkeit sensibler Daten</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=150078"/>
				<updated>2013-04-18T12:34:49Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top_10_2010_Developer_Edition_De:TopTemplate&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
== Seite in Bearbeitung (BAUSTELLE!!) ==&lt;br /&gt;
&lt;br /&gt;
== A7 Kryptografisch unsichere Speicherung == &lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SummaryTableHeaderBeginTemplate|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Ausnutzbarkeit|SCHWIERIG}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Verbreitung|SELTEN}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Auffindbarkeit|SCHWIERIG}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-1-Template|Auswirkung|SCHWERWIEGEND}}&lt;br /&gt;
{{Top_10_2010:SummaryTableHeaderEndTemplate}}&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Jeder Benutzer des Systems ist zu betrachten.&lt;br /&gt;
Haben diese ein Interesse, auf geschützte Daten unberechtigt zuzugreifen?&lt;br /&gt;
Wie steht es um Administratoren?&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Angreifer brechen üblicherweise nicht die eigentliche Kryptografie. Statt dessen finden Sie Schlüssel, Klartexte oder greifen über Kanäle mit automatischer Entschlüsselung auf Daten zu.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td colspan=2  {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehlende Verschlüsselung vertraulicher Daten ist die häufigste Schwachstelle, gefolgt von unsicherer Schlüsselerzeugung, der Speicherung statischer Schlüssel und die Nutzung schwacher Algorithmen. Schwache Hashwerte ohne Salt kommen zum Passwortschutz oft vor. Ein eingeschränkter Zugriff lässt externe Angreifer solche Probleme i.d.R. nicht leicht entdecken. Den nötigen Zugriff müssen sie vorher auf andere Weise erlangen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehler kompromittieren regelmäßig vertrauliche Daten. Es handelt sich hierbei oft um sensitive Daten wie personenbezogene Daten, Benutzernamen und Passwörter oder Kreditkarteninformationen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Betrachten Sie den Wert verlorener Daten und die Auswirkungen auf die Reputation des betroffenen Unternehmens. Hat es ggf. auch juristische Konsequenzen, wenn die Daten bekannt werden?&amp;lt;/td&amp;gt;&lt;br /&gt;
{{Top_10_2010:SummaryTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=main}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=firstLeft|risk=7|year=2010|language=de}}  &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 1&amp;lt;/u&amp;gt;''': Eine Anwendung speichert verschlüsselt Kreditkartendaten in einer Datenbank, um Sie vor Angreifern zu schützen. Die Datenbank ist so eingerichtet, dass die Daten beim Auslesen automatisch entschlüsselt werden. Durch SQL-Injection können in diesem Fall alle Kreditkartendaten im Klartext ausgelesen werden. Das System hätte so konfiguriert sein sollen, dass nur nachgelagerte Anwendungen und nicht die Webanwendung selbst entschlüsseln dürfen.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 2&amp;lt;/u&amp;gt;''': Ein Datensicherungsband speichert verschlüsselte Gesundheitsdaten, aber der Schlüssel ist ebenfalls dort gespeichert. Das Band geht auf dem Transportweg verloren.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 3&amp;lt;/u&amp;gt;''': Die Passwortdatenbank benutzt Hashwerte ohne Salt zur Speicherung der Passwörter. Eine Schwachstelle in der Downloadfunktion ermöglicht einem Angreifer den Zugriff auf die Datei. Zu allen Hashes kann in vier Wochen ein passender Klartext gefunden werden. Bei starken Hashwerten mit Salt hätte dieser Angriff über 3000 Jahre gedauert.&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=7|year=2010|language=de}} &lt;br /&gt;
Eine Übersicht über alle Tücken unsicherer Kryptografie liegt weit außerhalb des Rahmens der Top 10. Für alle vertrau-lichen Daten sollten Sie zumindest:&lt;br /&gt;
# Die Bedrohungen betrachten, vor denen Sie die Daten schützen wollen (z. B. Innen- und Außentäter) und sicherstellen, dass diese Daten angemessen durch Verschlüsselung geschützt werden.&lt;br /&gt;
# Sicherstellen, dass ausgelagerte Datensicherungen verschlüsselt sind und die Schlüssel getrennt verwaltet und gesichert werden.&lt;br /&gt;
# Sicherstellen, dass angemessene, starke Algorithmen und Schlüssel verwendet und verwaltet werden.&lt;br /&gt;
# Sicherstellen, dass Passwörter mit einem starken Algorithmus und einem angemessenen Salt gehasht werden.&lt;br /&gt;
# Sicherstellen, dass alle Schlüssel und Passwörter vor unberechtigtem Zugriff geschützt sind.&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''JAVA''' =  &lt;br /&gt;
&amp;lt;!-- z.Z ohne Template ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
Beispiel für das sichere Hashen von Passwörtern. Um die Sicherheit zu erhöhen sollte jedes Passwort mit einem Zufallswert (Salt) berechnet und möglichst viele Iterationen beim Hashing genutzt werden. &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String password = &amp;quot;Password&amp;quot;;&lt;br /&gt;
byte[] salt = new byte[8];&lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-256&amp;quot;);&lt;br /&gt;
digest.reset();&lt;br /&gt;
digest.update(salt);&lt;br /&gt;
byte[] input = digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
for (int i = 0; i &amp;lt; 100000; i++) {&lt;br /&gt;
   digest.reset();&lt;br /&gt;
   input = digest.digest(input);&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dies ist ein einfaches Beispiel für die Veschlüsselung von Texten, hier mit dem AES-128 Algorithmus. Die Wahl der Verschlüsselungsparameter wie beispielsweise Algorithmus, Ciphermodus oder Schlüssellänge ist groß und kommt dabei immer auf die jeweiligen Daten und die Anwendung an. &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
byte[] ivBytes = new byte[16];&lt;br /&gt;
(new SecureRandom()).nextBytes(ivBytes);&lt;br /&gt;
SecretKeySpec key = new SecretKeySpec(&amp;quot;My128bitMastrKey&amp;quot;.getBytes(), &amp;quot;AES&amp;quot;);&lt;br /&gt;
IvParameterSpec paramSpec = new IvParameterSpec(ivBytes); &lt;br /&gt;
Cipher cipher = Cipher.getInstance(&amp;quot;AES/CBC/PKCS5Padding&amp;quot;);&lt;br /&gt;
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); &lt;br /&gt;
byte[] encrypted = cipher.doFinal(plainText.getBytes());&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
Geheime Schlüssel sollten natürlich natürlich wie im nebenstehenden Beispiel im Quellcode stehen. Um Schlüssel sicher, aber auch gleichzeitig einfach zugänglich und austauschbar aufzubewahren empfiehlt sich eine spezielle Schlüsseldatei, wie beispielweise der Java KeyStore. In dieser Datei werden die Schlüssel mit einem MasterKey gesichert, die Datei selbst sollte getrennt von den verschlüsselten Daten abgelegt werden:&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
char[] password = getMasterKey(); &lt;br /&gt;
byte[] salt = new byte[20]; &lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
// neuen Schlüssel erzeugen &lt;br /&gt;
SecretKeyFactory factory = SecretKeyFactory.getInstance(&amp;quot;PBKDF2WithHmacSHA1&amp;quot;);&lt;br /&gt;
PBEKeySpec pbeKeySpec = new PBEKeySpec(password, salt, 1000, 128);&lt;br /&gt;
SecretKey mySecretKey = factory.generateSecret(pbeKeySpec);&lt;br /&gt;
&lt;br /&gt;
// neuen KeyStore für symmetrische Schlüssel erzeugen &lt;br /&gt;
KeyStore ks = KeyStore.getInstance(&amp;quot;JCEKS&amp;quot;);&lt;br /&gt;
ks.load(null, null);&lt;br /&gt;
&lt;br /&gt;
// Schlüssel speichern&lt;br /&gt;
KeyStore.ProtectionParameter passwordProtection = &lt;br /&gt;
     new KeyStore.PasswordProtection(password);&lt;br /&gt;
KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(mySecretKey);&lt;br /&gt;
ks.setEntry(&amp;quot;beispielkey&amp;quot;, entry, passwordProtection);&lt;br /&gt;
&lt;br /&gt;
// KeyStore in Datei speichern &lt;br /&gt;
FileOutputStream fos = new FileOutputStream(&amp;quot;SecretKeyStoreDatei&amp;quot;);&lt;br /&gt;
ks.store(fos,password);&lt;br /&gt;
fos.close();&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=3|risk=7|year=2010|language=de}}&lt;br /&gt;
Grundsätzlich gibt es bei der Verschlüsselung immer viele Wahlmöglichkeiten. Die Benutzung der ESAPI erleichtert die Handhabung ungemein, da neben einer großen Bandbreite an Verschlüsselungs-, Hash-, und Signaturalgorithmen auch Methoden für die Schlüsselerzeugung- und verwaltung unterstüzt werden. Die Verschlüsselung eines Textes beispielsweise reduziert sich dann zu:&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
CipherText ciphertext = ESAPI.encryptor().encrypt( new PlainText(myplaintext) );&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Überblick über die Anforderungen und die hierbei zu vermeidenden Probleme gibt es unter [http://www.owasp.org/index.php/ASVS#tab=ASVS ASVS requirements on Cryptography (V7)]. Des Weiteren:&lt;br /&gt;
* [[Top_10_2007-Insecure_Cryptographic_Storage | OWASP Top 10-2007 on Insecure Cryptographic Storage]]&lt;br /&gt;
* [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encryptor.html ESAPI Encryptor API]&lt;br /&gt;
* [http://www.owasp.org/index.php/Guide_to_Cryptography#Insecure_transmission_of_secrets OWASP Development Guide: Chapter on Cryptography]&lt;br /&gt;
* [[Codereview-Cryptography | OWASP Code Review Guide: Chapter on Cryptography]]&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubSubsectionExternalReferencesTemplate|language=de}}&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/310.html CWE Entry 310 on Cryptographic Issues]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/312.html CWE Entry 312 on Cleartext Storage of Sensitive Information]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/326.html CWE Entry 326 on Weak Encryption]&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''Test''' =&lt;br /&gt;
&amp;lt;!-- weitere Programmiersprachen oder evtl Anti-Beispiele ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=|risk=7|year=2010|language=de}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=7|year=2010|language=de}}&lt;br /&gt;
(ganze Breite)&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:BottomAdvancedTemplate&lt;br /&gt;
    |type=0&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Top 10 fuer Entwickler]]&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=149465</id>
		<title>Germany/Projekte/Top 10 fuer Entwickler-2013/A6-Verlust der Vertraulichkeit sensibler Daten</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=149465"/>
				<updated>2013-04-09T09:33:28Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top_10_2010_Developer_Edition_De:TopTemplate&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
== Seite in Bearbeitung (BAUSTELLE!!) ==&lt;br /&gt;
&lt;br /&gt;
== A7 Kryptografisch unsichere Speicherung == &lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SummaryTableHeaderBeginTemplate|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Ausnutzbarkeit|SCHWIERIG}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Verbreitung|SELTEN}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Auffindbarkeit|SCHWIERIG}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-1-Template|Auswirkung|SCHWERWIEGEND}}&lt;br /&gt;
{{Top_10_2010:SummaryTableHeaderEndTemplate}}&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Jeder Benutzer des Systems ist zu betrachten.&lt;br /&gt;
Haben diese ein Interesse, auf geschützte Daten unberechtigt zuzugreifen?&lt;br /&gt;
Wie steht es um Administratoren?&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Angreifer brechen üblicherweise nicht die eigentliche Kryptografie. Statt dessen finden Sie Schlüssel, Klartexte oder greifen über Kanäle mit automatischer Entschlüsselung auf Daten zu.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td colspan=2  {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehlende Verschlüsselung vertraulicher Daten ist die häufigste Schwachstelle, gefolgt von unsicherer Schlüsselerzeugung, der Speicherung statischer Schlüssel und die Nutzung schwacher Algorithmen. Schwache Hashwerte ohne Salt kommen zum Passwortschutz oft vor. Ein ein-geschränkter Zugriff lässt externe Angreifer solche Probleme i.d.R. nicht leicht ent-decken. Den nötigen Zugriff müssen sie vorher auf andere Weise erlangen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehler kompromittieren regelmäßig vertrauliche Daten. Es handelt sich hierbei oft um sensitive Daten wie personenbezogene Daten, Benutzernamen und Passwörter oder Kreditkarteninformationen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Betrachten Sie den Wert verlorener Daten und die Auswirkungen auf die Reputation des betroffenen Unternehmens. Hat es ggf. auch juristische Konsequenzen, wenn die Daten bekannt werden?&amp;lt;/td&amp;gt;&lt;br /&gt;
{{Top_10_2010:SummaryTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=main}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=firstLeft|risk=7|year=2010|language=de}}  &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 1&amp;lt;/u&amp;gt;''': Eine Anwendung speichert verschlüsselt Kreditkartendaten in einer Datenbank, um Sie vor Angreifern zu schützen. Die Datenbank ist so eingerichtet, dass die Daten beim Auslesen automatisch entschlüsselt werden. Durch SQL-Injection können in diesem Fall alle Kreditkartendaten im Klartext ausgelesen werden. Das System hätte so konfiguriert sein sollen, dass nur nachgelagerte Anwendungen und nicht die Webanwendung selbst entschlüsseln dürfen.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 2&amp;lt;/u&amp;gt;''': Ein Datensicherungsband speichert verschlüsselte Gesundheitsdaten, aber der Schlüssel ist ebenfalls dort gespeichert. Das Band geht auf dem Transportweg verloren.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 3&amp;lt;/u&amp;gt;''': Die Passwortdatenbank benutzt Hashwerte ohne Salt zur Speicherung der Passwörter. Eine Schwachstelle in der Downloadfunktion ermöglicht einem Angreifer den Zugriff auf die Datei. Zu allen Hashes kann in vier Wochen ein passender Klartext gefunden werden. Bei starken Hashwerten mit Salt hätte dieser Angriff über 3000 Jahre gedauert.&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=7|year=2010|language=de}} &lt;br /&gt;
Eine Übersicht über alle Tücken unsicherer Kryptografie liegt weit außerhalb des Rahmens der Top 10. Für alle vertrau-lichen Daten sollten Sie zumindest:&lt;br /&gt;
# Die Bedrohungen betrachten, vor denen Sie die Daten schützen wollen (z. B. Innen- und Außentäter) und sicherstellen, dass diese Daten angemessen durch Verschlüsselung geschützt werden.&lt;br /&gt;
# Sicherstellen, dass ausgelagerte Datensicherungen verschlüsselt sind und die Schlüssel getrennt verwaltet und gesichert werden.&lt;br /&gt;
# Sicherstellen, dass angemessene, starke Algorithmen und Schlüssel verwendet und verwaltet werden.&lt;br /&gt;
# Sicherstellen, dass Passwörter mit einem starken Algorithmus und einem angemessenen Salt gehasht werden.&lt;br /&gt;
# Sicherstellen, dass alle Schlüssel und Passwörter vor unberechtigtem Zugriff geschützt sind.&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''JAVA''' =  &lt;br /&gt;
&amp;lt;!-- z.Z ohne Template ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
Beispiel für das sichere Hashen von Passwörtern. Um die Sicherheit zu erhöhen sollte jedes Passwort mit einem Zufallswert (Salt) berechnet und möglichst viele Iterationen beim Hashing genutzt werden. &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String password = &amp;quot;Password&amp;quot;;&lt;br /&gt;
byte[] salt = new byte[8];&lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-256&amp;quot;);&lt;br /&gt;
digest.reset();&lt;br /&gt;
digest.update(salt);&lt;br /&gt;
byte[] input = digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
for (int i = 0; i &amp;lt; 100000; i++) {&lt;br /&gt;
   digest.reset();&lt;br /&gt;
   input = digest.digest(input);&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dies ist ein einfaches Beispiel für die Veschlüsselung von Texten, hier mit dem AES-128 Algorithmus. Die Wahl der Verschlüsselungsparameter wie beispielsweise Algorithmus, Ciphermodus oder Schlüssellänge ist gross und kommt dabei immer auf die jeweiligen Daten und die Anwendung an. &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
byte[] ivBytes = new byte[16];&lt;br /&gt;
(new SecureRandom()).nextBytes(ivBytes);&lt;br /&gt;
SecretKeySpec key = new SecretKeySpec(&amp;quot;My128bitMastrKey&amp;quot;.getBytes(), &amp;quot;AES&amp;quot;);&lt;br /&gt;
IvParameterSpec paramSpec = new IvParameterSpec(ivBytes); &lt;br /&gt;
Cipher cipher = Cipher.getInstance(&amp;quot;AES/CBC/PKCS5Padding&amp;quot;);&lt;br /&gt;
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); &lt;br /&gt;
byte[] encrypted = cipher.doFinal(plainText.getBytes());&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
Geheime Schlüssel sollten natürlich wie im nebenstehenden Beispiel im Quellcode stehen. Um Schlüssel sicher, aber auch gleichzeitig einfach zugänglich und austauschbar aufzubewahren empfiehlt sich eine spezielle Schlüsseldatei, wie beispielweise der Java KeyStore. In dieser Datei werden die Schlüssel mit einem MasterKey gesichert, die Datei selbst sollte getrennt von den verschlüsselten Daten abgelegt werden:&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
char[] password = getMasterKey(); &lt;br /&gt;
byte[] salt = new byte[20]; &lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
// neuen Schlüssel erzeugen &lt;br /&gt;
SecretKeyFactory factory = SecretKeyFactory.getInstance(&amp;quot;PBKDF2WithHmacSHA1&amp;quot;);&lt;br /&gt;
PBEKeySpec pbeKeySpec = new PBEKeySpec(password, salt, 1000, 128);&lt;br /&gt;
SecretKey mySecretKey = factory.generateSecret(pbeKeySpec);&lt;br /&gt;
&lt;br /&gt;
// neuen KeyStore für symmetrische Schlüssel erzeugen &lt;br /&gt;
KeyStore ks = KeyStore.getInstance(&amp;quot;JCEKS&amp;quot;);&lt;br /&gt;
ks.load(null, null);&lt;br /&gt;
&lt;br /&gt;
// Schlüssel speichern&lt;br /&gt;
KeyStore.ProtectionParameter passwordProtection = &lt;br /&gt;
     new KeyStore.PasswordProtection(password);&lt;br /&gt;
KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(mySecretKey);&lt;br /&gt;
ks.setEntry(&amp;quot;beispielkey&amp;quot;, entry, passwordProtection);&lt;br /&gt;
&lt;br /&gt;
// KeyStore in Datei speichern &lt;br /&gt;
FileOutputStream fos = new FileOutputStream(&amp;quot;SecretKeyStoreDatei&amp;quot;);&lt;br /&gt;
ks.store(fos,password);&lt;br /&gt;
fos.close();&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=3|risk=7|year=2010|language=de}}&lt;br /&gt;
Grundsätzlich gibt es bei der Verschlüsselung immer viele Wahlmöglichkeiten. Die Benutzung der ESAPI erleichtert die Handhabung ungemein, da neben einer grossen Bandbreite an Verschlüsselungs-, Hash-, und Signaturalgorithmen auch Methoden für die Schlüsselerzeugung -und Verwaltung untersützt werden. Die Verschlüsslung eines Textes beispielsweise reduziert sich dann zu:&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
CipherText ciphertext = ESAPI.encryptor().encrypt( new PlainText(myplaintext) );&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Überblick über die Anforderungen und die hierbei zu vermeidenden Probleme gibt es unter [http://www.owasp.org/index.php/ASVS#tab=ASVS ASVS requirements on Cryptography (V7)]. Des Weiteren:&lt;br /&gt;
* [[Top_10_2007-Insecure_Cryptographic_Storage | OWASP Top 10-2007 on Insecure Cryptographic Storage]]&lt;br /&gt;
* [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encryptor.html ESAPI Encryptor API]&lt;br /&gt;
* [http://www.owasp.org/index.php/Guide_to_Cryptography#Insecure_transmission_of_secrets OWASP Development Guide: Chapter on Cryptography]&lt;br /&gt;
* [[Codereview-Cryptography | OWASP Code Review Guide: Chapter on Cryptography]]&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubSubsectionExternalReferencesTemplate|language=de}}&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/310.html CWE Entry 310 on Cryptographic Issues]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/312.html CWE Entry 312 on Cleartext Storage of Sensitive Information]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/326.html CWE Entry 326 on Weak Encryption]&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''Test''' =&lt;br /&gt;
&amp;lt;!-- weitere Programmiersprachen oder evtl Anti-Beispiele ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=|risk=7|year=2010|language=de}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=7|year=2010|language=de}}&lt;br /&gt;
(ganze Breite)&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:BottomAdvancedTemplate&lt;br /&gt;
    |type=0&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Top 10 fuer Entwickler]]&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=149464</id>
		<title>Germany/Projekte/Top 10 fuer Entwickler-2013/A6-Verlust der Vertraulichkeit sensibler Daten</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=149464"/>
				<updated>2013-04-09T09:14:45Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top_10_2010_Developer_Edition_De:TopTemplate&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
== Seite in Bearbeitung (BAUSTELLE!!) ==&lt;br /&gt;
&lt;br /&gt;
== A7 Kryptografisch unsichere Speicherung == &lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SummaryTableHeaderBeginTemplate|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Ausnutzbarkeit|SCHWIERIG}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Verbreitung|SELTEN}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Auffindbarkeit|SCHWIERIG}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-1-Template|Auswirkung|SCHWERWIEGEND}}&lt;br /&gt;
{{Top_10_2010:SummaryTableHeaderEndTemplate}}&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Jeder Benutzer des Systems ist zu betrachten.&lt;br /&gt;
Haben diese ein Interesse, auf geschützte Daten unberechtigt zuzugreifen?&lt;br /&gt;
Wie steht es um Administratoren?&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Angreifer brechen üblicherweise nicht die eigentliche Kryptografie. Statt dessen finden Sie Schlüssel, Klartexte oder greifen über Kanäle mit automatischer Entschlüsselung auf Daten zu.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td colspan=2  {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehlende Verschlüsselung vertraulicher Daten ist die häufigste Schwachstelle, gefolgt von unsicherer Schlüsselerzeugung, der Speicherung statischer Schlüssel und die Nutzung schwacher Algorithmen. Schwache Hashwerte ohne Salt kommen zum Passwortschutz oft vor. Ein ein-geschränkter Zugriff lässt externe Angreifer solche Probleme i.d.R. nicht leicht ent-decken. Den nötigen Zugriff müssen sie vorher auf andere Weise erlangen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehler kompromittieren regelmäßig vertrauliche Daten. Es handelt sich hierbei oft um sensitive Daten wie personenbezogene Daten, Benutzernamen und Passwörter oder Kreditkarteninformationen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Betrachten Sie den Wert verlorener Daten und die Auswirkungen auf die Reputation des betroffenen Unternehmens. Hat es ggf. auch juristische Konsequenzen, wenn die Daten bekannt werden?&amp;lt;/td&amp;gt;&lt;br /&gt;
{{Top_10_2010:SummaryTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=main}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=firstLeft|risk=7|year=2010|language=de}}  &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 1&amp;lt;/u&amp;gt;''': Eine Anwendung speichert verschlüsselt Kreditkartendaten in einer Datenbank, um Sie vor Angreifern zu schützen. Die Datenbank ist so eingerichtet, dass die Daten beim Auslesen automatisch entschlüsselt werden. Durch SQL-Injection können in diesem Fall alle Kreditkartendaten im Klartext ausgelesen werden. Das System hätte so konfiguriert sein sollen, dass nur nachgelagerte Anwendungen und nicht die Webanwendung selbst entschlüsseln dürfen.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 2&amp;lt;/u&amp;gt;''': Ein Datensicherungsband speichert verschlüsselte Gesundheitsdaten, aber der Schlüssel ist ebenfalls dort gespeichert. Das Band geht auf dem Transportweg verloren.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 3&amp;lt;/u&amp;gt;''': Die Passwortdatenbank benutzt Hashwerte ohne Salt zur Speicherung der Passwörter. Eine Schwachstelle in der Downloadfunktion ermöglicht einem Angreifer den Zugriff auf die Datei. Zu allen Hashes kann in vier Wochen ein passender Klartext gefunden werden. Bei starken Hashwerten mit Salt hätte dieser Angriff über 3000 Jahre gedauert.&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=7|year=2010|language=de}} &lt;br /&gt;
Eine Übersicht über alle Tücken unsicherer Kryptografie liegt weit außerhalb des Rahmens der Top 10. Für alle vertrau-lichen Daten sollten Sie zumindest:&lt;br /&gt;
# Die Bedrohungen betrachten, vor denen Sie die Daten schützen wollen (z. B. Innen- und Außentäter) und sicherstellen, dass diese Daten angemessen durch Verschlüsselung geschützt werden.&lt;br /&gt;
# Sicherstellen, dass ausgelagerte Datensicherungen verschlüsselt sind und die Schlüssel getrennt verwaltet und gesichert werden.&lt;br /&gt;
# Sicherstellen, dass angemessene, starke Algorithmen und Schlüssel verwendet und verwaltet werden.&lt;br /&gt;
# Sicherstellen, dass Passwörter mit einem starken Algorithmus und einem angemessenen Salt gehasht werden.&lt;br /&gt;
# Sicherstellen, dass alle Schlüssel und Passwörter vor unberechtigtem Zugriff geschützt sind.&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''JAVA''' =  &lt;br /&gt;
&amp;lt;!-- z.Z ohne Template ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
Beispiel für das sichere Hashen von Passwörtern. Um die Sicherheit zu erhöhen sollte jedes Passwort mit einem Zufallswert (Salt) berechnet und möglichst viele Iterationen beim Hashing genutzt werden. &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String password = &amp;quot;Password&amp;quot;;&lt;br /&gt;
byte[] salt = new byte[8];&lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-256&amp;quot;);&lt;br /&gt;
digest.reset();&lt;br /&gt;
digest.update(salt);&lt;br /&gt;
byte[] input = digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
for (int i = 0; i &amp;lt; 100000; i++) {&lt;br /&gt;
   digest.reset();&lt;br /&gt;
   input = digest.digest(input);&lt;br /&gt;
}&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dies ist ein einfaches Beispiel für die Veschlüsselung von Texten, hier mit dem AES-128 Algorithmus. Die Wahl der Verschlüsselungsparameter wie beispielsweise Algorithmus, Ciphermodus oder Schlüssellänge ist gross und kommt dabei immer auf die jeweiligen Daten und die Anwendung an. &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
byte[] ivBytes = new byte[16];&lt;br /&gt;
(new SecureRandom()).nextBytes(ivBytes);&lt;br /&gt;
SecretKeySpec key = new SecretKeySpec(&amp;quot;My128bitMastrKey&amp;quot;.getBytes(), &amp;quot;AES&amp;quot;);&lt;br /&gt;
IvParameterSpec paramSpec = new IvParameterSpec(ivBytes); &lt;br /&gt;
Cipher cipher = Cipher.getInstance(&amp;quot;AES/CBC/PKCS5Padding&amp;quot;);&lt;br /&gt;
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); &lt;br /&gt;
byte[] encrypted = cipher.doFinal(plainText.getBytes());&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
Geheime Schlüssel sollten natürlich wie im nebenstehenden Beispiel im Quellcode stehen. Um Schlüssel sicher, aber auch gleichzeitig einfach zugänglich und austauschbar aufzubewahren empfiehlt sich eine spezielle Schlüsseldatei, wie beispielweise der Java KeyStore. In dieser Datei werden die Schlüssel mit einem MasterKey gesichert, die Datei selbst sollte getrennt von den verschlüsselten Daten abgelegt werden:&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
char[] password = getMasterKey(); &lt;br /&gt;
byte[] salt = new byte[20]; (new SecureRandom()).nextBytes(salt);&lt;br /&gt;
&lt;br /&gt;
// neuen Schlüssel erzeugen &lt;br /&gt;
SecretKeyFactory factory = SecretKeyFactory.getInstance(&amp;quot;PBKDF2WithHmacSHA1&amp;quot;);&lt;br /&gt;
SecretKey mySecretKey = factory.generateSecret(new PBEKeySpec(password, salt, 1000, 128));&lt;br /&gt;
&lt;br /&gt;
// neuen KeyStore für symmetrische Schlüssel erzeugen &lt;br /&gt;
KeyStore ks = KeyStore.getInstance(&amp;quot;JCEKS&amp;quot;);&lt;br /&gt;
ks.load(null, null);&lt;br /&gt;
&lt;br /&gt;
// Schlüssel speichern&lt;br /&gt;
KeyStore.ProtectionParameter passwordProtection = new KeyStore.PasswordProtection(password);&lt;br /&gt;
KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(mySecretKey);&lt;br /&gt;
ks.setEntry(&amp;quot;beispielkey&amp;quot;, entry, passwordProtection);&lt;br /&gt;
&lt;br /&gt;
// KeyStore in Datei speichern (möglichst unzugänglich und getrennt von den verschlüsselten Daten&lt;br /&gt;
java.io.FileOutputStream fos = new java.io.FileOutputStream(&amp;quot;SecretKeyStoreDatei&amp;quot;);&lt;br /&gt;
ks.store(fos,password);&lt;br /&gt;
fos.close();&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=3|risk=7|year=2010|language=de}}&lt;br /&gt;
Grundsätzlich gibt es bei der Verschlüsselung immer viele Wahlmöglichkeiten. Die Benutzung der ESAPI erleichtert die Handhabung ungemein, da neben einer grossen Bandbreite an Verschlüsselungs-, Hash-, und Signaturalgorithmen auch Methoden für die Schlüsselerzeugung -und Verwaltung untersützt werden. Die Verschlüsslung eines Textes beispielsweise reduziert sich dann zu:&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
CipherText ciphertext = ESAPI.encryptor().encrypt( new PlainText(myplaintext) );&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Überblick über die Anforderungen und die hierbei zu vermeidenden Probleme gibt es unter [http://www.owasp.org/index.php/ASVS#tab=ASVS ASVS requirements on Cryptography (V7)]. Des Weiteren:&lt;br /&gt;
* [[Top_10_2007-Insecure_Cryptographic_Storage | OWASP Top 10-2007 on Insecure Cryptographic Storage]]&lt;br /&gt;
* [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encryptor.html ESAPI Encryptor API]&lt;br /&gt;
* [http://www.owasp.org/index.php/Guide_to_Cryptography#Insecure_transmission_of_secrets OWASP Development Guide: Chapter on Cryptography]&lt;br /&gt;
* [[Codereview-Cryptography | OWASP Code Review Guide: Chapter on Cryptography]]&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubSubsectionExternalReferencesTemplate|language=de}}&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/310.html CWE Entry 310 on Cryptographic Issues]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/312.html CWE Entry 312 on Cleartext Storage of Sensitive Information]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/326.html CWE Entry 326 on Weak Encryption]&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''Test''' =&lt;br /&gt;
&amp;lt;!-- weitere Programmiersprachen oder evtl Anti-Beispiele ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=|risk=7|year=2010|language=de}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=7|year=2010|language=de}}&lt;br /&gt;
(ganze Breite)&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:BottomAdvancedTemplate&lt;br /&gt;
    |type=0&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Top 10 fuer Entwickler]]&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Category:OWASP_Top_10_fuer_Entwickler&amp;diff=149443</id>
		<title>Category:OWASP Top 10 fuer Entwickler</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Category:OWASP_Top_10_fuer_Entwickler&amp;diff=149443"/>
				<updated>2013-04-08T14:29:29Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top_10_2010_Developer_Edition_De:TopTemplate|useprev=Nothing|usenext=NextLink_Germany_Projekte|next=Top_10_fuer_Entwickler/Risiken|prev=}}&lt;br /&gt;
==Projekt-Seite 'Top 10 fuer Entwickler'==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background-color:inherit;&amp;quot;&lt;br /&gt;
| width=&amp;quot;70%&amp;quot; style=&amp;quot;vertical-align:top; padding-right:0.5em;&amp;quot; |&lt;br /&gt;
== Ziele des Projekts: ==&lt;br /&gt;
Beim German OWASP Day 2012 entstand die Idee eine Version der OWASP Top 10 für Entwickler zu erstellen. &lt;br /&gt;
Inhaltlich sollen die Top 10 für Entwickler 'schmackhaft' gemacht werden, d.h. es soll eine '''Brücke''' von den '''OWASP Top 10''' zu den ''' 'Good Practices' (Cheat Sheets)''' bilden.&lt;br /&gt;
&lt;br /&gt;
'''Geplanter Inhalt:'''&lt;br /&gt;
# Problem verstehen (aus [https://www.owasp.org/images/b/b8/OWASPTop10_DE_Version_1_0.pdf OWASP Top 10 2010 - German PDF], 'Master' für das Dokument, gleiches Aussehen wie das englische [[Top_10_2010]]-Wiki (gepl: [[Top_10_2013]])), ggf. etwas mehr Platz für Erklärungen als in der Original-Version&lt;br /&gt;
# wie programmiere ich richtig (mit Quelltext-Beispiel(en) (zunächst Java, weitere Sprachen sind vorbereitet)) &lt;br /&gt;
# wo finde ich mehr Infos =&amp;gt; [[Cheat Sheets]], [https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/Download/Vorabversionen/Baustein_Webanwendungen.pdf BSI: IT-Grundschutz Baustein Webanwendungen'] etc. &lt;br /&gt;
&lt;br /&gt;
Inhaltlich nicht neu, jedoch für Anwendungsentwickler neu zusammengestellt. Damit die Hürde für den 1. Einstieg geringer ist, wird das Dokument in Deutsch erstellt.&lt;br /&gt;
Das Dokument soll für Schulungen und als Nachschlagewerk geeignet sein.&lt;br /&gt;
&lt;br /&gt;
'''Wer Lust &amp;amp; Zeit hat mitzumachen (Autor, Wiki-Designer, Software-Entwickler, Reviewpartner etc) bitte Info an [[User:T.Gigler|T.Gigler]].''' &lt;br /&gt;
| width=&amp;quot;30%&amp;quot; style=&amp;quot;vertical-align:top; padding-left:0.5em;border-left:1px solid black&amp;quot; |&lt;br /&gt;
== Top 10 Developer Edition in German ==&lt;br /&gt;
The objectives of the '''project''' is to add ''' ''Good Practices'' (like the Cheat Sheets)''' to the '''OWASP Top 10'''. Its aim is to bridge the gap between awareness, theoretical knowledge to effective know-how to build good programs. It is written in German to make it easier for German developers to use it.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''IMPORTANT NOTICE: We started to compile this wiki. It is in early alpha state!'''&amp;lt;br/&amp;gt; &lt;br /&gt;
All templates will we developed as 'multilingual' templates. So it should be easy to use them for other languages (for Top-10 Wikis in other languages than English or other Developer Editions of the Top-10).&lt;br /&gt;
&lt;br /&gt;
If you like to join us or if you have questions, please do not hesitate to contact [[User:T.Gigler|T.Gigler]].&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
&amp;amp;nbsp;&amp;lt;br/&amp;gt;&lt;br /&gt;
==Actual Work in Progress==&lt;br /&gt;
Hier eine &amp;lt;u&amp;gt;Auflistung der einzelnen Kapitel / Teile / Review-TODOs&amp;lt;/u&amp;gt; - wer einen Teil übernehmen möchte schreibt sich bitte einfach ein (im Feld &amp;lt;u&amp;gt;Ersteller(in)&amp;lt;/u&amp;gt;). Alle Rollen können gerne mit zwei oder mehr Personen besetzt werden.&lt;br /&gt;
&lt;br /&gt;
Im &amp;lt;u&amp;gt;Kommentarfeld&amp;lt;/u&amp;gt; bitte angeben, bis wann ihr plant, den Punkt fertig bearbeitet zu haben (und natürlich sonstige notwendigen Kommentare). Das Kommentarfeld eignet sich auch, um anzugeben, wer den peer review für diesen Teil macht (vgl. Status &amp;quot;in Diskussion&amp;quot;).  &lt;br /&gt;
&lt;br /&gt;
Unter &amp;lt;u&amp;gt;Status&amp;lt;/u&amp;gt; könnt Ihr das Folgende angeben:&lt;br /&gt;
* &amp;lt;b&amp;gt;offen&amp;lt;/b&amp;gt; (dieser Teil ist noch unbearbeitet)&lt;br /&gt;
* &amp;lt;b&amp;gt;in Arbeit&amp;lt;/b&amp;gt; (dieser Teil wird aktuell bearbeitet: Sichten der 'Good Practices', ggf. Diskussion mit dessen Erstellern, Erstellen der Wiki-Seite)&lt;br /&gt;
* &amp;lt;b&amp;gt;im Review&amp;lt;/b&amp;gt; (Arbeit des initialen Reviewers abgeschlossen; Kommentierung / peer review durch andere wird durchgeführt)&lt;br /&gt;
* &amp;lt;b&amp;gt;geschlossen&amp;lt;/b&amp;gt; (die Kommentierung dieses Teils ist abgeschlossen)&lt;br /&gt;
* &amp;lt;b&amp;gt;übernommen&amp;lt;/b&amp;gt; (Die Review-Anmerkungen wurden in das Wiki übernommen)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;min-width: 20%&amp;quot; |Kapitel / Teil / Task&lt;br /&gt;
! style=&amp;quot;min-width: 10%&amp;quot; |Ersteller(in)&amp;lt;br/&amp;gt;Wiki-Seite inkl JAVA&lt;br /&gt;
! style=&amp;quot;min-width: 10%&amp;quot; |1. Review-Partner(in)&lt;br /&gt;
! style=&amp;quot;min-width: 7%&amp;quot;  |Status&lt;br /&gt;
! Kommentar (Fragen, Besonderheiten, Hilfe benötigt, Termine etc)&lt;br /&gt;
! style=&amp;quot;min-width: 10%&amp;quot; |Ersteller(in)&amp;lt;br/&amp;gt;für weitere Programmiersprachen&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;6&amp;quot;| '''Administratives/Allgemeines'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;!--- Thema                 ---&amp;gt; Basis-Wiki inkl. Templates erstellen &lt;br /&gt;
| &amp;lt;!--- Ersteller(in)         ---&amp;gt; Torsten &lt;br /&gt;
| &amp;lt;!--- 1. Review-Partner(in) ---&amp;gt; Achim&lt;br /&gt;
| &amp;lt;!--- Status                ---&amp;gt; in Arbeit&lt;br /&gt;
| &amp;lt;!--- Kommentar             ---&amp;gt; Basis: derzeit: Top 10 - 2010, Internationalisierung des englischen Wikis (inkl. Templates),&amp;lt;br/&amp;gt; geplant: Schwenk auf Top 10 - 2013, wenn die deutsche Übersetzung vorhanden ist.&lt;br /&gt;
| &amp;lt;!--- weitere Progr.spr.    ---&amp;gt; &amp;lt;center&amp;gt;---&amp;lt;/center&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;6&amp;quot;| '''Dokument'''&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;!--- Thema                 ---&amp;gt; style=&amp;quot;background:#CAE1FF&amp;quot;|&amp;lt;center&amp;gt;[[Germany/Projekte/Top 10 fuer Entwickler/A1 {{Top_10_2010_Developer_Edition_De:ByTheNumbers|1|language=de|year=2010}}|{{Top_10_2010_Developer_Edition_De:ByTheNumbers|1|language=de|year=2010}}]]&amp;lt;/center&amp;gt; &lt;br /&gt;
&amp;lt;!--- 2010: Injection =&amp;gt; 2013 RC1: A1 ----&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Ersteller(in)         ---&amp;gt; Torsten, Ralf&lt;br /&gt;
| &amp;lt;!--- 1. Review-Partner(in) ---&amp;gt; &amp;lt;offen&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Status                ---&amp;gt; in Arbeit&lt;br /&gt;
| &amp;lt;!--- Kommentar             ---&amp;gt; Referenz-Eintrag zur Diskussion&lt;br /&gt;
| &amp;lt;!--- weitere Progr.spr.    ---&amp;gt;  &lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background:#CAE1FF&amp;quot;|&amp;lt;center&amp;gt;[[Germany/Projekte/Top 10 fuer Entwickler/A2 {{Top_10_2010_Developer_Edition_De:ByTheNumbers|2|language=de|year=2010}}|{{Top_10_2010_Developer_Edition_De:ByTheNumbers|2|language=de|year=2010}}]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;!--- XSS =&amp;gt; 2013 RC1: A3 ----&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Ersteller(in)         ---&amp;gt; Thomas, Ralf&lt;br /&gt;
| &amp;lt;!--- 1. Review-Partner(in) ---&amp;gt; &amp;lt;offen&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Status                ---&amp;gt; in Arbeit&lt;br /&gt;
| &amp;lt;!--- Kommentar             ---&amp;gt; &lt;br /&gt;
| &amp;lt;!--- weitere Progr.spr.    ---&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;!--- Thema                 ---&amp;gt; style=&amp;quot;background:#CAE1FF&amp;quot;|&amp;lt;center&amp;gt;[[Germany/Projekte/Top 10 fuer Entwickler/A3 {{Top_10_2010_Developer_Edition_De:ByTheNumbers|3|language=de|year=2010}}|{{Top_10_2010_Developer_Edition_De:ByTheNumbers|3|language=de|year=2010}}]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;!--- 2013 RC1: A2 ----&amp;gt;&lt;br /&gt;
&amp;lt;!---- (T.Gigler: besser): Authentisierung anstatt Authentifizierung ----&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Ersteller(in)         ---&amp;gt; Thomas&lt;br /&gt;
| &amp;lt;!--- 1. Review-Partner(in) ---&amp;gt; &amp;lt;offen&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Status                ---&amp;gt; in Arbeit&lt;br /&gt;
| &amp;lt;!--- Kommentar             ---&amp;gt; &lt;br /&gt;
| &amp;lt;!--- weitere Progr.spr.    ---&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;!--- Thema                 ---&amp;gt; style=&amp;quot;background:#CAE1FF&amp;quot;|&amp;lt;center&amp;gt;[[Germany/Projekte/Top 10 fuer Entwickler/A4 {{Top_10_2010_Developer_Edition_De:ByTheNumbers|4|language=de|year=2010}}|{{Top_10_2010_Developer_Edition_De:ByTheNumbers|4|language=de|year=2010}}]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;!--- 2013 RC1: A4 ----&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Ersteller(in)         ---&amp;gt; Thomas&lt;br /&gt;
| &amp;lt;!--- 1. Review-Partner(in) ---&amp;gt; &amp;lt;offen&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Status                ---&amp;gt; offen&lt;br /&gt;
| &amp;lt;!--- Kommentar             ---&amp;gt; &lt;br /&gt;
| &amp;lt;!--- weitere Progr.spr.    ---&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;!--- Thema                 ---&amp;gt; style=&amp;quot;background:#CAE1FF&amp;quot;|&amp;lt;center&amp;gt;[[Germany/Projekte/Top 10 fuer Entwickler/A5 {{Top_10_2010_Developer_Edition_De:ByTheNumbers|5|language=de|year=2010}}|{{Top_10_2010_Developer_Edition_De:ByTheNumbers|5|language=de|year=2010}}]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;!--- 2013 RC1: A8 ----&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Ersteller(in)         ---&amp;gt; Torsten, Ralf&lt;br /&gt;
| &amp;lt;!--- 1. Review-Partner(in) ---&amp;gt; &amp;lt;offen&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Status                ---&amp;gt; in Arbeit&lt;br /&gt;
| &amp;lt;!--- Kommentar             ---&amp;gt; &lt;br /&gt;
| &amp;lt;!--- weitere Progr.spr.    ---&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;!--- Thema                 ---&amp;gt;style=&amp;quot;background:#CAE1FF&amp;quot;|&amp;lt;center&amp;gt;[[Germany/Projekte/Top 10 fuer Entwickler/A6 {{Top_10_2010_Developer_Edition_De:ByTheNumbers|6|language=de|year=2010}}|{{Top_10_2010_Developer_Edition_De:ByTheNumbers|6|language=de|year=2010}}]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;!--- 2013 RC1: A5 ----&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Ersteller(in)         ---&amp;gt; &lt;br /&gt;
| &amp;lt;!--- 1. Review-Partner(in) ---&amp;gt; &amp;lt;offen&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Status                ---&amp;gt; offen&lt;br /&gt;
| &amp;lt;!--- Kommentar             ---&amp;gt; &lt;br /&gt;
| &amp;lt;!--- weitere Progr.spr.    ---&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;!--- Thema                 ---&amp;gt; style=&amp;quot;background:#E0E0E0&amp;quot;|&amp;lt;center&amp;gt;[[Germany/Projekte/Top 10 fuer Entwickler/A7 {{Top_10_2010_Developer_Edition_De:ByTheNumbers|7|language=de|year=2010}}|{{Top_10_2010_Developer_Edition_De:ByTheNumbers|7|language=de|year=2010}}]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;!--- 2013 RC1: A6 ----&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Ersteller(in)         ---&amp;gt; Michal V.&lt;br /&gt;
| &amp;lt;!--- 1. Review-Partner(in) ---&amp;gt; &amp;lt;offen&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Status                ---&amp;gt; offen&lt;br /&gt;
| &amp;lt;!--- Kommentar             ---&amp;gt; &lt;br /&gt;
| &amp;lt;!--- weitere Progr.spr.    ---&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;!--- Thema                 ---&amp;gt; &amp;lt;center&amp;gt;[[Germany/Projekte/Top 10 fuer Entwickler/A8 {{Top_10_2010_Developer_Edition_De:ByTheNumbers|8|language=de|year=2010}}|{{Top_10_2010_Developer_Edition_De:ByTheNumbers|8|language=de|year=2010}}]]&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Ersteller(in)         ---&amp;gt; &lt;br /&gt;
| &amp;lt;!--- 1. Review-Partner(in) ---&amp;gt; &amp;lt;offen&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Status                ---&amp;gt; offen&lt;br /&gt;
| &amp;lt;!--- Kommentar             ---&amp;gt; Tbd (Prio 3)&lt;br /&gt;
| &amp;lt;!--- weitere Progr.spr.    ---&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;!--- Thema                 ---&amp;gt; &amp;lt;center&amp;gt;[[Germany/Projekte/Top 10 fuer Entwickler/A9 {{Top_10_2010_Developer_Edition_De:ByTheNumbers|9|language=de|year=2010}}|{{Top_10_2010_Developer_Edition_De:ByTheNumbers|9|language=de|year=2010}}]]&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Ersteller(in)         ---&amp;gt; &lt;br /&gt;
| &amp;lt;!--- 1. Review-Partner(in) ---&amp;gt; &amp;lt;offen&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Status                ---&amp;gt; offen&lt;br /&gt;
| &amp;lt;!--- Kommentar             ---&amp;gt; Tbd (Prio 3)&lt;br /&gt;
| &amp;lt;!--- weitere Progr.spr.    ---&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;!--- Thema                 ---&amp;gt; style=&amp;quot;background:#CAE1FF&amp;quot;|&amp;lt;center&amp;gt;[[Germany/Projekte/Top 10 fuer Entwickler/A10 {{Top_10_2010_Developer_Edition_De:ByTheNumbers|10|language=de|year=2010}}|{{Top_10_2010_Developer_Edition_De:ByTheNumbers|10|language=de|year=2010}}]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;!--- 2013 RC1: A10 ----&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Ersteller(in)         ---&amp;gt; &lt;br /&gt;
| &amp;lt;!--- 1. Review-Partner(in) ---&amp;gt; &amp;lt;offen&amp;gt;&lt;br /&gt;
| &amp;lt;!--- Status                ---&amp;gt; offen&lt;br /&gt;
| &amp;lt;!--- Kommentar             ---&amp;gt; &lt;br /&gt;
| &amp;lt;!--- weitere Progr.spr.    ---&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Anmerkung:''' Risiken, die sich in der im Review befindlichen Version der [http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20-%202013%20-%20RC1.pdf OWASP Top 10 - 2013 RC1] nicht ändern, sind &amp;lt;span style=&amp;quot;background:#CAE1FF&amp;quot;&amp;gt;'''blau'''&amp;lt;/span&amp;gt; und Änderungen sind &amp;lt;span style=&amp;quot;background:#E0E0E0&amp;quot;&amp;gt;'''grau'''&amp;lt;/span&amp;gt; unterlegt. &lt;br /&gt;
&lt;br /&gt;
Weitere Informationen und die aktuellen Arbeitsstände gibt es unter [[Category Talk:OWASP Top 10 fuer Entwickler| &amp;quot;Discussion&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_Top_10_Fuer_Entwickler_Project}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''[[Germany/Projekte/Top_10_fuer_Entwickler/Risiken|hier gehts los / please start here ==&amp;gt;]]'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:BottomTemplate|type={{Top_10_2010:StyleTemplate}}|usenext=NextLink_Germany_Projekte|next=Top_10_fuer_Entwickler/Risiken|useprev=Nothing||prev=}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Germany]] [[Category:OWASP Project]] [[Category:OWASP Top Ten Project]]&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=149441</id>
		<title>Germany/Projekte/Top 10 fuer Entwickler-2013/A6-Verlust der Vertraulichkeit sensibler Daten</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Germany/Projekte/Top_10_fuer_Entwickler-2013/A6-Verlust_der_Vertraulichkeit_sensibler_Daten&amp;diff=149441"/>
				<updated>2013-04-08T14:26:03Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top_10_2010_Developer_Edition_De:TopTemplate&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
== Seite in Bearbeitung (BAUSTELLE!!) ==&lt;br /&gt;
&lt;br /&gt;
== A7 Kryptografisch unsichere Speicherung == &lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SummaryTableHeaderBeginTemplate|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Ausnutzbarkeit|SCHWIERIG}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Verbreitung|SELTEN}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-3-Template|Auffindbarkeit|SCHWIERIG}}&lt;br /&gt;
{{Top_10_2010:SummaryTableValue-1-Template|Auswirkung|SCHWERWIEGEND}}&lt;br /&gt;
{{Top_10_2010:SummaryTableHeaderEndTemplate}}&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Jeder Benutzer des Systems ist zu betrachten.&lt;br /&gt;
Haben diese ein Interesse, auf geschützte Daten unberechtigt zuzugreifen?&lt;br /&gt;
Wie steht es um Administratoren?&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Angreifer brechen üblicherweise nicht die eigentliche Kryptografie. Statt dessen finden Sie Schlüssel, Klartexte oder greifen über Kanäle mit automatischer Entschlüsselung auf Daten zu.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td colspan=2  {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehlende Verschlüsselung vertraulicher Daten ist die häufigste Schwachstelle, gefolgt von unsicherer Schlüsselerzeugung, der Speicherung statischer Schlüssel und die Nutzung schwacher Algorithmen. Schwache Hashwerte ohne Salt kommen zum Passwortschutz oft vor. Ein ein-geschränkter Zugriff lässt externe Angreifer solche Probleme i.d.R. nicht leicht ent-decken. Den nötigen Zugriff müssen sie vorher auf andere Weise erlangen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Fehler kompromittieren regelmäßig vertrauliche Daten. Es handelt sich hierbei oft um sensitive Daten wie personenbezogene Daten, Benutzernamen und Passwörter oder Kreditkarteninformationen.&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td {{Template:Top 10 2010:SummaryTableRowStyleTemplate}}&amp;gt;Betrachten Sie den Wert verlorener Daten und die Auswirkungen auf die Reputation des betroffenen Unternehmens. Hat es ggf. auch juristische Konsequenzen, wenn die Daten bekannt werden?&amp;lt;/td&amp;gt;&lt;br /&gt;
{{Top_10_2010:SummaryTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=main}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=example|position=firstLeft|risk=7|year=2010|language=de}}  &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 1&amp;lt;/u&amp;gt;''': Eine Anwendung speichert verschlüsselt Kreditkartendaten in einer Datenbank, um Sie vor Angreifern zu schützen. Die Datenbank ist so eingerichtet, dass die Daten beim Auslesen automatisch entschlüsselt werden. Durch SQL-Injection können in diesem Fall alle Kreditkartendaten im Klartext ausgelesen werden. Das System hätte so konfiguriert sein sollen, dass nur nachgelagerte Anwendungen und nicht die Webanwendung selbst entschlüsseln dürfen.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 2&amp;lt;/u&amp;gt;''': Ein Datensicherungsband speichert verschlüsselte Gesundheitsdaten, aber der Schlüssel ist ebenfalls dort gespeichert. Das Band geht auf dem Transportweg verloren.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''&amp;lt;u&amp;gt;Szenario 3&amp;lt;/u&amp;gt;''': Die Passwortdatenbank benutzt Hashwerte ohne Salt zur Speicherung der Passwörter. Eine Schwachstelle in der Downloadfunktion ermöglicht einem Angreifer den Zugriff auf die Datei. Zu allen Hashes kann in vier Wochen ein passender Klartext gefunden werden. Bei starken Hashwerten mit Salt hätte dieser Angriff über 3000 Jahre gedauert.&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=howPrevent|position=right|risk=7|year=2010|language=de}} &lt;br /&gt;
Eine Übersicht über alle Tücken unsicherer Kryptografie liegt weit außerhalb des Rahmens der Top 10. Für alle vertrau-lichen Daten sollten Sie zumindest:&lt;br /&gt;
# Die Bedrohungen betrachten, vor denen Sie die Daten schützen wollen (z. B. Innen- und Außentäter) und sicherstellen, dass diese Daten angemessen durch Verschlüsselung geschützt werden.&lt;br /&gt;
# Sicherstellen, dass ausgelagerte Datensicherungen verschlüsselt sind und die Schlüssel getrennt verwaltet und gesichert werden.&lt;br /&gt;
# Sicherstellen, dass angemessene, starke Algorithmen und Schlüssel verwendet und verwaltet werden.&lt;br /&gt;
# Sicherstellen, dass Passwörter mit einem starken Algorithmus und einem angemessenen Salt gehasht werden.&lt;br /&gt;
# Sicherstellen, dass alle Schlüssel und Passwörter vor unberechtigtem Zugriff geschützt sind.&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''JAVA''' =  &lt;br /&gt;
&amp;lt;!-- z.Z ohne Template ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
Beispiel für das sichere Hashen von Passwörtern. Um die Sicherheit zu erhöhen sollte jedes Passwort mit einem Zufallswert (Salt) berechnet und möglichst viele Iterationen beim Hashing (&amp;gt; 10.000) genutzt werden. &lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String password = &amp;quot;Password&amp;quot;;&lt;br /&gt;
byte[] salt = new byte[8];&lt;br /&gt;
(new SecureRandom()).nextBytes(salt);&lt;br /&gt;
MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-256&amp;quot;);&lt;br /&gt;
digest.reset();&lt;br /&gt;
digest.update(salt);&lt;br /&gt;
byte[] input = digest.digest(password.getBytes(&amp;quot;UTF-8&amp;quot;));&lt;br /&gt;
for (int i = 0; i &amp;lt; iterations; i++) {&lt;br /&gt;
   digest.reset();&lt;br /&gt;
   input = digest.digest(input);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}} &lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
Einfaches Beispiel für die Veschlüsselung von Texten, hier mit dem AES-128 Algorithmus. Die Wahl von Algorithmus und Schlüssellänge kommt immer auf die jeweiligen Daten und die Anwendung an. Der Schlüssel selbst sollte natürlich nie wie hier im Code selbst stehen sondern getrennt von Anwendung und verschlüsselten Daten für andere unzugänglich abgelegt werden. Dafür empfiehlt sich eine Schlüsseldatei (z.B. Java Keystore), die ihrerseits über einen MasterKey für andere unzugänglich gemacht werden sollte: &lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
byte[] ivBytes = new byte[16];&lt;br /&gt;
(new SecureRandom()).nextBytes(ivBytes);&lt;br /&gt;
SecretKeySpec key = new SecretKeySpec(&amp;quot;My128bitMastrKey&amp;quot;.getBytes(), &amp;quot;AES&amp;quot;);&lt;br /&gt;
IvParameterSpec paramSpec = new IvParameterSpec(ivBytes); &lt;br /&gt;
Cipher cipher = Cipher.getInstance(&amp;quot;AES/CBC/PKCS5Padding&amp;quot;);&lt;br /&gt;
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); &lt;br /&gt;
byte[] encrypted = cipher.doFinal(plainText.getBytes());&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=left|title=3|risk=7|year=2010|language=de}}&lt;br /&gt;
Grundsätzlich kommt es bei der Verschlüsselung neben der richtigen Wahl des Algorithmus und der Parameter (wie Schlüssellänge oder Cipher-modus) auch auf das richtige Schlüsselmanagement an. Die Benutzung der ESAPI erleichtert dabei die Handhabung ungemein, da neben einer grossen Bandbreite an Verschlüsselungs-, Hash-, und Signaturalgorithmen auch Methoden für die Schlüsselerzeugung -und Verwaltung untersützt werden. Die Verschlüsslung eines Textes beispielsweise reduziert sich dann zu:&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
CipherText ciphertext = ESAPI.encryptor().encrypt( new PlainText(myplaintext) );&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:SubSubsectionOWASPReferencesTemplate}}&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Überblick über die Anforderungen und die hierbei zu vermeidenden Probleme gibt es unter [http://www.owasp.org/index.php/ASVS#tab=ASVS ASVS requirements on Cryptography (V7)]. Des Weiteren:&lt;br /&gt;
* [[Top_10_2007-Insecure_Cryptographic_Storage | OWASP Top 10-2007 on Insecure Cryptographic Storage]]&lt;br /&gt;
* [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encryptor.html ESAPI Encryptor API]&lt;br /&gt;
* [http://www.owasp.org/index.php/Guide_to_Cryptography#Insecure_transmission_of_secrets OWASP Development Guide: Chapter on Cryptography]&lt;br /&gt;
* [[Codereview-Cryptography | OWASP Code Review Guide: Chapter on Cryptography]]&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubSubsectionExternalReferencesTemplate|language=de}}&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/310.html CWE Entry 310 on Cryptographic Issues]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/312.html CWE Entry 312 on Cleartext Storage of Sensitive Information]&lt;br /&gt;
* [http://cwe.mitre.org/data/definitions/326.html CWE Entry 326 on Weak Encryption]&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
= '''Test''' =&lt;br /&gt;
&amp;lt;!-- weitere Programmiersprachen oder evtl Anti-Beispiele ---&amp;gt;&lt;br /&gt;
{{Top_10:SubsectionTableBeginTemplate|type=headertab}} {{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=firstLeft|title=1|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=right|title=2|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10_2010:ExampleBeginTemplate}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
{{Top_10_2010:ExampleEndTemplate}}&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=defOp|position=whole|title=|risk=7|year=2010|language=de}}&lt;br /&gt;
tbd&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=userImpact|position=left|risk=7|year=2010|language=de}}&lt;br /&gt;
(ganze Breite)&lt;br /&gt;
Text&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:SubsectionAdvancedTemplate|type={{Top_10_2010:StyleTemplate}}|subsection=references|position=right|risk=7|year=2010|language=de}}&lt;br /&gt;
{{Top_10:SubsectionTableEndTemplate}}&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Top_10_2010_Developer_Edition_De:BottomAdvancedTemplate&lt;br /&gt;
    |type=0&lt;br /&gt;
    |useprev=PrevLink_Germany_Projekte&lt;br /&gt;
    |usenext=NextLink_Germany_Projekte&lt;br /&gt;
    |prev=Top_10_fuer_Entwickler/A6_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |6&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
    |next=Top_10_fuer_Entwickler/A8_{{Top_10_2010_Developer_Edition_De:ByTheNumbers&lt;br /&gt;
              |8&lt;br /&gt;
              |language=de&lt;br /&gt;
              |year=2010}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Top 10 fuer Entwickler]]&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Michal_Vossberg&amp;diff=149241</id>
		<title>User:Michal Vossberg</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Michal_Vossberg&amp;diff=149241"/>
				<updated>2013-04-05T13:04:40Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Principal Security Architect :: here.com :: NOKIA&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Michal_Vossberg&amp;diff=149239</id>
		<title>User:Michal Vossberg</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Michal_Vossberg&amp;diff=149239"/>
				<updated>2013-04-05T13:01:57Z</updated>
		
		<summary type="html">&lt;p&gt;Michal Vossberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Principal Security Architect &lt;br /&gt;
here.com &lt;br /&gt;
NOKIA&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michal Vossberg</name></author>	</entry>

	</feed>