Öffentliche Aufgaben und Richtlinien

Sicheres Programmieren in der Praxis

Informieren Sie sich über Richtlinien für sicheres Programmieren, um Software-Sicherheitslücken wie die OWASP Top 10 zu verstehen und zu beheben, und nehmen Sie an geführten Trainingsmissionen teil, um praktische App-Simulationen zu üben.

배울 BG

Durchsuche alle Missionen

더 보기
생산성을 높이십시오
SQL 주입
한 사용자로부터 인터넷 은행 솔루션의 거래 검색 기능에서 SQL 인젝션 취약점을 악용할 수 있었다는 신고를 받았습니다. 이 사용자는 다른 사용자의 거래를 볼 수 있었다고 말하며, 이 취약점을 통해 공격자가 테이블 삭제, 다른 테이블의 데이터 보기, 데이터 삽입 등 데이터베이스에 온갖 종류의 끔찍한 일을 할 수 있다고 지적했습니다. 이 미션에서 사용자가 수행한 작업을 직접 복제해 보세요.
생산성을 높이십시오
Spring MvcRequestMatchers
2023년 3월, Spring은 내부적으로 발견된 취약점(CVE-2023-20860)에 대한 수정 사항을 발표했는데, mvcRequestMatchers에서 이중 와일드카드**를 사용하면 Spring Security와 Spring MVC 간에 패턴 불일치가 발생할 수 있습니다. 이로 인해 궁극적으로 사용자가 특정 엔드포인트에 대한 무단 액세스를 얻을 수 있습니다. 몇 개의 엔드포인트로 매우 간단한 뱅킹 애플리케이션을 설정해 보았습니다. 지침에 따라 이 접근 제어 취약점의 영향을 재현해 보세요.
생산성을 높이십시오
심령 서명 - 알려진 취약한 구성 요소 사용
CVE-2022-21449는 자바의 심령 서명이라는 가장 멋진 별칭을 가진 취약점입니다. 어떻게 그런 이름이 붙었을까요? 그것은 닥터 후의 초능력 종이에 대한 언급입니다. 누군가에게 이 빈 종이를 보여주면, 그 사람이 예상할 수 있는 내용으로 채워지게 됩니다. Java(버전 15부터 18까지)의 ECDSA 알고리즘 구현에서도 비슷한 일이 발생했으며, 이는 JWT의 서명 확인에 영향을 미칩니다. 유효하지 않은 서명을 제출할 수 있지만 Java는 이를 유효한 것으로 간주합니다. 어떻게 작동하는지 알고 싶으신가요? 시작해 보겠습니다.
생산성을 높이십시오
Apache 경로 탐색 - 알려진 취약한 구성 요소 사용
2021년 10월 4일 아파치 팀은 아파치 2.4.48의 경로 탐색 및 원격 코드 실행 취약점(CVE-2021-41773으로도 알려진)을 해결하기 위해 아파치 2.4.49 버전을 출시했습니다. 2021년 10월 7일, 2.4.50 핫픽스의 수정이 완료되지 않아 2.4.51 버전을 출시했습니다. 이 취약점은 CVE-2021-42013으로 추적되었습니다. 이 미션을 통해 이 취약점이 어떻게 악용될 수 있는지 직접 확인해 보세요.
생산성을 높이십시오
Log4j - 알려진 취약한 구성 요소 사용
2021년 12월 초, 매우 인기 있는 로깅 라이브러리 Log4j의 0일 익스플로잇(CVE-2021-44228)이 발표되면서 Java 커뮤니티에 폭탄이 떨어졌습니다. Log4Shell이라고 불리는 이 익스플로잇은 Log4j v2 버전 2.0-beta9부터 2.14.1까지 영향을 미치며 원격 코드 실행으로 이어질 수 있습니다. 이 익스플로잇이 어떤 영향을 미치는지 직접 확인할 수 있도록 모의 환경을 설정했습니다. 지금 바로 사용해 보세요.
생산성을 높이십시오
트로이 목마 소스 - 신뢰할 수 없는 소스의 구성 요소 사용
바이킹 은행 개발자 중 한 명이 신용카드 관리를 위한 관리자 권한 확인을 작성하기 위해 인터넷의 신뢰할 수 없는 소스에서 취약한 구성 요소가 포함되어 있을 가능성이 있는 일부 코드를 순진하게 복사했습니다. 관리자만 이 권한을 가져야 함에도 불구하고 사용자들이 신용카드 한도를 변경하는 것을 발견했습니다. 해당 코드에 문제가 있는 것 같습니다. 코드를 조사하는 미션을 수행해 보세요.
생산성을 높이십시오
코드스타시빈 - 안전하지 않은 비밀번호 재설정 기능
CodeStashBin은 세계 최대의 코드 버전 관리 호스팅 회사 중 하나입니다. 비밀번호 찾기 프로세스에 안전하지 않은 비밀번호 재설정 기능 취약점이 있다는 소문이 돌고 있습니다. 권한 있는 사용자의 비밀번호를 변경하여 계정에 액세스할 수 있을지도 모릅니다. 이 미션에 참여하여 문제를 조사해 보세요.
생산성을 높이십시오
'ChatterGPT'의 크로스 사이트 스크립팅(XSS)
이 미션은 2023년 11월 말에 생성된 실제 코드 스니펫을 활용하여 인기 있는 LLM의 익숙한 인터페이스를 보여줍니다. 사용자는 이 코드 조각을 해석하고 의도된 목적에 맞게 사용될 경우 잠재적인 보안 함정을 조사할 수 있습니다.

Alle Richtlinien durchsuchen

검색:
필터 숨기기
선정
필터 표시
선정
필터 삭제
키워드
슈퍼 아이콘 [★]
테마
더 보기

Unzureichende Protokollierung und Überwachung

모범 사례:

민감한 기능에 대한 로깅 감사
오류 로깅
중앙 집중식 위치에 로그 저장
정해진 기간 동안 로그 보존
PII에 대한 정기적인 로그 감사

Protokollierung und Überwachung sind oft ein nachträglicher Gedanke, wenn bereits etwas schief gelaufen ist, aber in Wirklichkeit kann es sehr kostspielig sein, wenn nicht sichergestellt wird, dass eine ordnungsgemäße Protokollierung und Überwachung erfolgt. Im Extremfall ist es unmöglich, herauszufinden, was tatsächlich passiert ist, wenn ein Vorfall auftritt (ob sicherheitsrelevant oder nicht), wenn nur wenige oder gar keine Protokolle vorliegen. Auf der anderen Seite kann die Protokollierung zu vieler Daten zu Datenschutzproblemen führen, die dann zu Problemen mit den Aufsichtsbehörden führen können. Lesen Sie unseren Leitfaden für bewährte Verfahren zur Vermeidung einer unzureichenden Protokollierung und Überwachung.

지침 보기

알려진 보안 취약점이 있는 구성 요소 사용

{
„Abhängigkeiten“: {
„foo“: „1,0,0-2,9999,9999",
„bar“: „>=1.0.2 <2.1.2"
}
}

Die meisten Anwendungen verwenden große Mengen an Komponenten von Drittanbietern. Diese Komponenten bieten alles, von Logging über Templating bis hin zum Datenbankzugriff und mehr. Dies erleichtert die Softwareentwicklung erheblich und spart viel Zeit. Sie werden aber auch von Menschen gemacht, was bedeutet, dass einige unweigerlich Sicherheitslücken enthalten. Lesen Sie die Richtlinie, um mehr zu erfahren.

지침 보기

SQL 주입

importiere mysql.connector
db = mysql.connector.connect
#Bad -Praxis. Vermeide das! Das ist nur zum Lernen.
(host="localhost „, user="newuser „, passwd="pass „, db="sample „)
cur = db.cursor ()
name = raw_input ('Name eingeben: ')
cur.execute („SELECT * FROM Sample_DATA WHERE Name = '%s';“% name) für Zeile in cur.fetchall (): print (row)
db.schließen ()

SQL Injection (SQLi) injiziert Code in SQL-Anweisungen, um eine Anwendung aufzurufen und wichtige Informationen von ihnen zu sammeln. Es handelt sich um eine Sicherheitslücke im Internet. Es ist die gebräuchlichste Hacking-Technik, bei der die Datenbank manipuliert und wichtige Informationen daraus extrahiert werden.

지침 보기

보안 설정 오류

Viele Frameworks verfügen auch über eine Reihe von Endpunkten, die aktiviert werden können, sodass die Anwendung überwacht werden kann, unabhängig davon, ob sich diese in einer Produktions- oder Test-/Entwicklungsumgebung befindet. Diese können beinhalten:

Metriken (Prometheus)
Logs
Informationen zur Umgebung
Pfad-/URL-Zuordnungen

Sicherheitsfehlkonfiguration ist so etwas wie ein Überbegriff, der häufig auftretende Sicherheitslücken abdeckt, die eher auf die Konfigurationseinstellungen einer Anwendung als auf schlechten Code zurückzuführen sind. Es handelt sich um ein weitreichendes Thema, das stark von Faktoren wie Ihrem Technologie-Stack abhängt. Oft scheint die Behebung dieser Probleme einfach zu sein, wie das Ändern einer Konfigurationsdatei oder sogar einer einzelnen Codezeile, aber die Auswirkungen und Folgen dieser Sicherheitslücken können schwerwiegend sein. Lesen Sie unsere Richtlinie, um mehr über diese Sicherheitsanfälligkeit zu erfahren und zu erfahren, wie Sie sie beheben können.

지침 보기

서버 측 요청 위조

ts
lass url = request.params.url;

lass response = http.get (url);
let render = response.render ();

render.export () zurückgeben;

Sicherheitslücken durch serverseitige Anforderungsfälschung treten auf, wenn ein Benutzer eine Anwendung veranlassen kann, HTTP-Anfragen an eine vom Angreifer bestimmte Domain zu stellen. Wenn eine Anwendung Zugriff auf private/interne Netzwerke hat, kann ein Angreifer die Anwendung auch veranlassen, Anfragen an interne Server zu stellen. Wir werden uns das anhand einiger Beispiele genauer ansehen, um besser zu verstehen, wie es in dieser Richtlinie in Aktion aussieht.

지침 보기

Speicherung von Passwörtern

기능 암호화 해시 암호 해시 속도 매우 빠름 의도적으로 느림 작업 계수 조정 가능 아니오 예

Wenn Ihre Anwendung Benutzer authentifiziert, wird sie wahrscheinlich auch mit Passwörtern umgehen. Der Umgang mit Benutzerkennwörtern ist eine wirklich große Sache, und der angemessene Umgang mit ihnen ist noch wichtiger. Es ist schwer, sich ein schlimmeres Szenario vorzustellen, als wenn eine Anwendung angegriffen wird und Benutzerkennwörter für alle sichtbar im Internet durchgesickert sind. Wie können Passwörter sicher und gemäß den besten Praktiken gespeichert werden? Schauen wir uns ein paar Möglichkeiten an.

지침 보기

Massenzuweisung

html
<form method="POST">
<input name="Id" type="hidden" value="666">
<input name="Name" type="text" value="Bad guy">
<input name="EmailAddress" type="text" value="hacker@attacker.com">
<input name="IsAdmin" type="hidden" value="true">
<input type="submit">
</form>

Massenzuweisungen sind eine Sicherheitslücke, bei der API-Endpunkte nicht einschränken, welche Eigenschaften des zugehörigen Objekts von einem Benutzer geändert werden können. Diese Sicherheitsanfälligkeit kann auftreten, wenn eine Bibliothek/ein Framework verwendet wird, das die automatische Bindung von HTTP-Parametern an ein Modell ermöglicht, das dann ohne Überprüfung verwendet wird. Die Verwendung der automatischen Bindung von einer Anfrage an ein Objekt kann manchmal äußerst hilfreich sein, kann aber auch zu Sicherheitsproblemen führen, wenn das Modell Eigenschaften hat, auf die der Benutzer nicht zugreifen kann. Lesen Sie die Richtlinie für weitere Informationen.

지침 보기

Fehlkonfiguration der Sicherheitseinstellungen — XXE detailliert

xml
<? xml-Version = „1.0"? >
<! DOCTYPE Äußeres Element [
<! ] >
<outerElement>&Externe Entität;</outerElement>

Bei der Schwachstellenklasse „XML eXternal Entities“ (XXE) handelt es sich um eine Sicherheitsfehlkonfiguration, an der XML-Parser beteiligt sind. Der XML-Standard beinhaltet Möglichkeiten, auf „Entitäten“ wie Dateien und URLs zu verweisen. Es ist oft die Standardeinstellung, dass Parser externe Entitäten vollständig auflösen, was bedeutet, dass XML-Dokumente zur Offenlegung von Dateien und anderen vertraulichen Informationen für potenzielle Angreifer führen können. Lesen Sie die vollständige Richtlinie für weitere Informationen.

지침 보기

Injektion — Pfaddurchquerung

Pseudo-
lass BaseFolder = „/var/www/api/documents/“;
let path = BaseFolder + request.params.filename;

gib file.read (Pfad) zurück;

Path Traversal ist eine weitere ziemlich häufige Art von Injektionsanfälligkeit. Sie treten in der Regel auf, wenn durch die Erstellung einer URI (sei es für eine URL, einen Dateipfad oder etwas anderes) nicht ordnungsgemäß sichergestellt wird, dass der vollständig aufgelöste Pfad nicht außerhalb des Stammverzeichnisses des vorgesehenen Pfads zeigt. Die Auswirkungen einer Sicherheitslücke durch Pfaddurchquerung hängen stark vom Kontext ab, in dem die Traversierung stattfindet, und von der Art der Absicherung, die insgesamt vorgenommen wurde. Lesen Sie die Richtlinie, um mehr zu erfahren.

지침 보기

Authentifizierung und Autorisierung

cs

// Ensure the default behaviour is to authenticate requests, and check if they are admin
[Authenticate]
[Authorize("Admin")]
public class SecureController : Controller
{

}

public class MyController : SecureController
{

    // Overrides the Authorize attribute inherited to allow any user to access the page

지침 보기

Injektion - XSS

```html
<!--- UNSAFE: The htmlSnippet will get interpreted without any escaping --->
@Html .Raw (HTML-Ausschnitt)
```

Cross-Site Scripting, auch bekannt als XSS, ist eine weitere Art von Injection-Schwachstelle, die zur Auswertung eines vom Angreifer gesteuerten Skripts im Browser eines anderen Benutzers führt. XSS kann auch als HTML/JavaScript-Injection-Schwachstelle betrachtet werden. Schauen wir uns an, auf welche XSS-Typen Sie stoßen können.

지침 보기

Injektion 101

가장 일반적인 인젝션 유형은 다음과 같습니다:

SQL 인젝션
크로스 사이트 스크립팅(HTML/자바스크립트 인젝션)
경로 탐색(경로/URL 인젝션)
명령 인젝션
코드 인젝션

Eine der bekanntesten Klassen von Sicherheitslücken sind in der Regel Injection-Schwachstellen, insbesondere, und das überrascht niemanden, das unbestrittene Aushängeschild: SQL Injection. Es ist schwer zu vermeiden, in der Technologiewelt von SQL-Injection zu hören, also werden wir einfach darüber sprechen. Lesen Sie weiter, um eine kurze Einführung in Injektionsfehler zu erhalten.

지침 보기

Datei hochladen

öffentliche Zeichenfolge uploadProfilePicture (formFile uploadedFile)
{
//Generieren Sie den Pfad zum Speichern der hochgeladenen Datei unter
var-Pfad = $“. /uploads/avatare/ {request.user.ID}/{uploadedFile.filename}“;

//Speichere die Datei
var LocalFile = file.openWrite (Pfad);
Lokaldatei.write (hochgeladene Datei.readToEnd ());
Lokaldatei.flush ();
Lokaldatei.close ();

//Aktualisiere das Profilbild
userProfile.updateUserProfilePicture (request.User, Pfad)

Rückweg;
}

Es kommt sehr häufig vor, dass Anwendungen irgendwann Benutzern erlauben müssen, eine Datei (entweder zur Verwendung oder nur zur Speicherung) irgendwo in der Anwendung hochzuladen. Es scheint zwar einfach zu sein, aber die Art und Weise, wie diese Funktion implementiert wird, kann aufgrund der potenziellen Risiken, die mit der Handhabung von Datei-Uploads verbunden sind, ziemlich wichtig sein. Lesen Sie die Richtlinie für weitere Informationen.

지침 보기

Befehlsinjektion

let ip = request.params.IPAddress;

system („ping" + ip);

Schauen wir uns Command Injection selbst an. Wir werden uns hauptsächlich auf einige verschiedene Beispiele konzentrieren, damit es einfacher ist, zu sehen, wie es in Aktion aussieht. Zur kleinen Auffrischung: Command Injection-Schwachstellen treten auf, wenn Benutzereingaben einen Teil eines Betriebssystembefehls verwenden. Lesen Sie die Richtlinie für weitere Informationen.

지침 보기