Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
f895051277 | ||
|
e347887e00 | ||
|
e65fd4d346 | ||
|
76bd2acca5 | ||
|
6ab73d5042 | ||
|
1e59e8c5ea | ||
|
e049fd8467 | ||
|
a1693033aa | ||
|
a1246aec9e | ||
|
ae6f9aebcb | ||
|
bc39e5bdba | ||
|
f57412a4f5 | ||
|
889372f2d9 | ||
|
5173ef7923 | ||
|
302f58609b | ||
|
f1853c004a | ||
|
dbab132d46 |
@ -1,4 +0,0 @@
|
||||
**
|
||||
|
||||
!/target
|
||||
!/config/desktop
|
@ -1,15 +0,0 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
max_line_length = 120
|
||||
tab_width = 4
|
||||
ij_continuation_indent_size = 8
|
||||
ij_formatter_off_tag = @formatter:off
|
||||
ij_formatter_on_tag = @formatter:on
|
||||
ij_formatter_tags_enabled = false
|
||||
ij_java_names_count_to_use_import_on_demand = 999
|
@ -1,18 +0,0 @@
|
||||
on: [push]
|
||||
|
||||
name: DDSCA
|
||||
|
||||
jobs:
|
||||
software-composition-analysis:
|
||||
runs-on: ubuntu-latest
|
||||
name: Datadog SBOM Generation and Upload
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Check imported libraries are secure and compliant
|
||||
id: datadog-software-composition-analysis
|
||||
uses: DataDog/datadog-sca-github-action@main
|
||||
with:
|
||||
dd_api_key: ${{ secrets.DD_API_KEY }}
|
||||
dd_app_key: ${{ secrets.DD_APP_KEY }}
|
||||
dd_site: datadoghq.com
|
@ -1,21 +0,0 @@
|
||||
on: [push]
|
||||
|
||||
name: DDSDS
|
||||
|
||||
jobs:
|
||||
static-analysis:
|
||||
runs-on: ubuntu-latest
|
||||
name: Datadog Static Analyzer
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Check code for comitted secrets
|
||||
id: datadog-static-analysis
|
||||
uses: DataDog/datadog-static-analyzer-github-action@v1
|
||||
with:
|
||||
dd_api_key: ${{ secrets.DD_API_KEY }}
|
||||
dd_app_key: ${{ secrets.DD_APP_KEY }}
|
||||
dd_site: datadoghq.com
|
||||
secrets_enabled: true
|
||||
static_analysis_enabled: false
|
||||
cpu_count: 2
|
@ -1,23 +0,0 @@
|
||||
on: [push]
|
||||
|
||||
name: DDSAST
|
||||
|
||||
jobs:
|
||||
static-analysis:
|
||||
runs-on: ubuntu-latest
|
||||
name: Datadog Static Analyzer
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Check code meets quality and security standards
|
||||
id: datadog-static-analysis
|
||||
uses: DataDog/datadog-static-analyzer-github-action@v1
|
||||
with:
|
||||
dd_api_key: ${{ secrets.DD_API_KEY }}
|
||||
dd_app_key: ${{ secrets.DD_APP_KEY }}
|
||||
dd_site: datadoghq.com
|
||||
cpu_count: 8
|
||||
env:
|
||||
DD_API_KEY: ${{ secrets.DD_API_KEY }}
|
||||
DD_APP_KEY: ${{ secrets.DD_APP_KEY }}
|
||||
DD_SITE: datadoghq.com
|
@ -1,171 +0,0 @@
|
||||
name: Scheduled Fake Commits
|
||||
|
||||
on:
|
||||
# Trigger the workflow on a schedule.
|
||||
schedule:
|
||||
# This expression means "run every 3 minutes". Useful for testing.
|
||||
# To revert to the original 8-hour schedule, change this to '0 */8 * * *'.
|
||||
- cron: "0 */12 * * *" # Original schedule: every 8 hours
|
||||
|
||||
# To trigger manually for testing, you can add workflow_dispatch:
|
||||
# workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
create_scheduled_commits:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
# Fetch the full history to ensure pushes work correctly
|
||||
fetch-depth: 0
|
||||
# Use a token with write access. This should be stored as a secret in your Gitea repo settings.
|
||||
# The default GITEA_TOKEN might not have push permissions, so a Personal Access Token is recommended.
|
||||
# Ensure you have a secret named GITEA_TOKEN with appropriate permissions (including write:actions or api)
|
||||
token: ${{ secrets.GLOBAL_KEY }} # Replace GITEA_TOKEN with the name of your secret
|
||||
|
||||
- name: Set up Git config
|
||||
# Configure Git user details globally for the runner
|
||||
run: |
|
||||
echo "setting up git config"
|
||||
git config --global user.name "Gitea Actions Bot"
|
||||
git config --global user.email "actions-bot@your-gitea-instance.com" # Replace with a suitable email
|
||||
echo "git config setup complete"
|
||||
|
||||
- name: Create and Push Commits and Trigger Workflows
|
||||
id: push_commits_and_trigger # Updated ID
|
||||
env:
|
||||
# Define your list of authors here. Each author should be on a new line,
|
||||
# formatted as "Author Name <author@email.com>".
|
||||
# For production, this should ideally be stored as a secret named FAKE_COMMIT_AUTHORS.
|
||||
# For debugging, you can define it directly here as you have done.
|
||||
AUTHOR_LIST: |
|
||||
Author One <author1@example.com>
|
||||
Author Two <author2@example.com>
|
||||
Author Three <author3@example.com>
|
||||
Author Four <author4@example.com>
|
||||
Author Five <author5@example.com>
|
||||
Author Six <author6@example.com>
|
||||
Author Seven <author7@example.com>
|
||||
Author Eight <author8@example.com>
|
||||
Author Nine <author9@example.com>
|
||||
Author Ten <author10@example.com>
|
||||
DWSAuthor One <dwsauthor1@example.com>
|
||||
DWSAuthor Two <dwsauthor2@example.com>
|
||||
DWSAuthor Three <dwsauthor3@example.com>
|
||||
DWSAuthor Four <autdwshor4@example.com>
|
||||
DWSAuthor Five <autdwshor5@example.com>
|
||||
DWSAuthor Six <autdwshor6@example.com>
|
||||
DWSAuthor Seven <adwsuthor7@example.com>
|
||||
DWSAuthor Eight <adwsuthor8@example.com>
|
||||
DWSAuthor Nine <autdwshor9@example.com>
|
||||
DWSAuthor Ten <autdwshor10@example.com>
|
||||
COMMIT_COUNT: 3 # Number of commits to create
|
||||
SLEEP_SECONDS: 150 # Delay between commits in seconds
|
||||
TARGET_BRANCH: main # The branch to commit to and trigger workflows on
|
||||
GITEA_BASE_URL: https://git.dws.rip # Replace with your Gitea instance URL
|
||||
REPO_OWNER: dubey # Replace with your repository owner/organization
|
||||
REPO_NAME: WebGoat # Replace with your repository name
|
||||
# Define a space-separated list of workflow names to trigger
|
||||
WORKFLOW_NAMES: "DDSAST DDSDS DDSCA" # Replace with the actual names of your workflows
|
||||
|
||||
run: |
|
||||
echo "starting Create and Push Commits and Trigger Workflows step"
|
||||
echo "AUTHOR_LIST content:"
|
||||
# Mask sensitive content if AUTHOR_LIST were a secret, but here it's in the workflow file for debugging
|
||||
# echo "$AUTHOR_LIST" | sed 's/@[^>]*>/@***/g' # Example masking
|
||||
|
||||
echo "reading author's list into array"
|
||||
# Read authors into a Bash array using readarray
|
||||
readarray -t authors <<< "$AUTHOR_LIST"
|
||||
echo "finished reading author's list into array"
|
||||
|
||||
# Check if authors list is empty
|
||||
if [ ${#authors[@]} -eq 0 ]; then
|
||||
echo "Error: AUTHOR_LIST is empty or could not be parsed into an array."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Shuffle the authors array to randomize the order
|
||||
authors=($(printf "%s\n" "${authors[@]}" | shuf))
|
||||
|
||||
# Read workflow names into a Bash array
|
||||
IFS=' ' read -r -a workflow_array <<< "$WORKFLOW_NAMES"
|
||||
echo "Workflows to trigger: ${workflow_array[@]}"
|
||||
|
||||
echo "Starting commit creation process..."
|
||||
echo "Authors available: ${#authors[@]}"
|
||||
echo "Commits to create: $COMMIT_COUNT"
|
||||
echo "Delay between commits: $SLEEP_SECONDS seconds"
|
||||
echo "Target branch: $TARGET_BRANCH"
|
||||
|
||||
# Loop to create the specified number of commits
|
||||
for i in $(seq 1 $COMMIT_COUNT); do
|
||||
# Calculate the index for the current author, cycling through the list
|
||||
author_index=$(( (i - 1) % ${#authors[@]} ))
|
||||
current_author="${authors[$author_index]}"
|
||||
|
||||
echo "Processing author: $current_author" # Debug echo
|
||||
|
||||
# Extract name and email from the author string
|
||||
# Assumes format "Name <email>"
|
||||
author_name=$(echo "$current_author" | sed -E 's/^(.*) <.*>$/\1/')
|
||||
author_email=$(echo "$current_author" | sed -E 's/^.* <(.*)>$/\1/')
|
||||
|
||||
echo "Extracted name: $author_name, email: $author_email" # Debug echo
|
||||
|
||||
echo "--- Creating commit $i of $COMMIT_COUNT by $author_name ---"
|
||||
|
||||
# Configure git user for this specific commit
|
||||
git config user.name "$author_name"
|
||||
git config user.email "$author_email"
|
||||
|
||||
# Create a dummy change: append current timestamp and author to a file
|
||||
# This ensures there's always something to commit
|
||||
echo "$(date): Commit $i by $author_name" >> fake_commit_log.txt
|
||||
|
||||
# Stage the changes
|
||||
git add fake_commit_log.txt
|
||||
|
||||
# Commit the changes
|
||||
git commit -m "Automated commit $i by $author_name"
|
||||
|
||||
# Push the commit to the target branch
|
||||
# Use --set-upstream origin $TARGET_BRANCH on the first push if needed
|
||||
echo "Pushing commit..."
|
||||
git push origin HEAD:$TARGET_BRANCH
|
||||
|
||||
echo "Commit $i pushed successfully."
|
||||
|
||||
# --- Trigger the other workflows after each successful push ---
|
||||
echo "Triggering specified workflows on branch '$TARGET_BRANCH' for commit $i..."
|
||||
|
||||
# Loop through the list of workflow names and trigger each one
|
||||
for workflow_name in "${workflow_array[@]}"; do
|
||||
echo "Attempting to trigger workflow: $workflow_name"
|
||||
# Construct the API URL
|
||||
API_URL="${GITEA_BASE_URL}/api/v1/repos/${REPO_OWNER}/${REPO_NAME}/actions/workflows/${workflow_name}/dispatches"
|
||||
|
||||
# Use curl to send the API request
|
||||
# Requires a GITEA_TOKEN with write:actions or api scope
|
||||
curl -X POST \
|
||||
-H "Authorization: Bearer ${{ secrets.GLOBAL_KEY }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"ref": "'"$TARGET_BRANCH"'"}' \
|
||||
"$API_URL"
|
||||
|
||||
echo "Workflow trigger request sent for workflow '$workflow_name' for commit $i."
|
||||
done
|
||||
echo "Finished triggering workflows for commit $i."
|
||||
# --- End Trigger ---
|
||||
|
||||
|
||||
# Wait for the specified delay before the next commit, unless it's the last one
|
||||
if [ $i -lt $COMMIT_COUNT ]; then
|
||||
echo "Waiting for $SLEEP_SECONDS seconds before the next commit..."
|
||||
sleep $SLEEP_SECONDS
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Finished creating $COMMIT_COUNT commits and triggering workflows."
|
1
.github/FUNDING.yml
vendored
@ -1 +0,0 @@
|
||||
custom: https://owasp.org/donate/?reponame=www-project-webgoat&title=OWASP+WebGoat
|
17
.github/dependabot.yml
vendored
@ -1,14 +1,7 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
- package-ecosystem: "maven"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
- package-ecosystem: "docker"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
# Maintain dependencies for GitHub Actions
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
10
.github/lock.yml
vendored
@ -1,10 +0,0 @@
|
||||
---
|
||||
daysUntilLock: 365
|
||||
skipCreatedBefore: false
|
||||
exemptLabels: []
|
||||
lockLabel: false
|
||||
lockComment: >
|
||||
This thread has been automatically locked because it has not had
|
||||
recent activity after it was closed. :lock: Please open a new issue
|
||||
for regressions or related bugs.
|
||||
setLockReason: false
|
10
.github/stale.yml
vendored
@ -1,10 +0,0 @@
|
||||
---
|
||||
daysUntilStale: 90
|
||||
daysUntilClose: 14
|
||||
onlyLabels:
|
||||
- waiting for input
|
||||
- wontfix
|
||||
staleLabel: stale
|
||||
markComment: >
|
||||
This issue has been automatically marked as `stale` because it has not had recent activity. :calendar: It will be _closed automatically_ in one week if no further activity occurs.
|
||||
closeComment: false
|
54
.github/workflows/branchbuild.txt
vendored
@ -1,54 +0,0 @@
|
||||
name: "Branch build"
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "*"
|
||||
- "!main"
|
||||
|
||||
jobs:
|
||||
branch-build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
||||
java-version: [ 21 ]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up JDK ${{ matrix.java-version }}
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: ${{ matrix.java-version }}
|
||||
architecture: x64
|
||||
- name: Cache Maven packages
|
||||
uses: actions/cache@v3.3.1
|
||||
with:
|
||||
path: ~/.m2
|
||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: ${{ runner.os }}-m2-
|
||||
- name: Build with Maven
|
||||
run: mvn --no-transfer-progress verify
|
||||
- name: "Set up QEMU"
|
||||
if: runner.os == 'Linux'
|
||||
uses: docker/setup-qemu-action@v2.2.0
|
||||
- name: "Set up Docker Buildx"
|
||||
if: runner.os == 'Linux'
|
||||
uses: docker/setup-buildx-action@v2
|
||||
- name: "Verify Docker WebGoat build"
|
||||
if: runner.os == 'Linux'
|
||||
uses: docker/build-push-action@v5.1.0
|
||||
with:
|
||||
context: ./
|
||||
file: ./Dockerfile
|
||||
push: false
|
||||
build-args: |
|
||||
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
|
||||
- name: "Verify Docker WebGoat desktop build"
|
||||
uses: docker/build-push-action@v5.1.0
|
||||
if: runner.os == 'Linux'
|
||||
with:
|
||||
context: ./
|
||||
file: ./Dockerfile_desktop
|
||||
push: false
|
||||
build-args: |
|
||||
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
|
51
.github/workflows/build.yml
vendored
@ -1,51 +0,0 @@
|
||||
name: "Main / Pull requests build"
|
||||
on:
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '.txt'
|
||||
- 'LICENSE'
|
||||
- 'docs/**'
|
||||
branches: [ main ]
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
pre-commit:
|
||||
name: Pre-commit check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout git repository
|
||||
uses: actions/checkout@v4.1.6
|
||||
- name: Setup python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.9"
|
||||
- uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '23'
|
||||
- name: Pre-commit checks
|
||||
uses: pre-commit/action@v3.0.1
|
||||
- name: pre-commit-c-lite
|
||||
uses: pre-commit-ci/lite-action@v1.1.0
|
||||
if: always()
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
needs: [ pre-commit ]
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
os: [ windows-latest, ubuntu-latest, macos-13 ]
|
||||
max-parallel: 1
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.6
|
||||
- name: Set up JDK 23
|
||||
uses: actions/setup-java@v4.2.1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 23
|
||||
architecture: x64
|
||||
cache: 'maven'
|
||||
- name: Build with Maven
|
||||
run: mvn --no-transfer-progress verify
|
42
.github/workflows/main.yml
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
name: "CI/CD Pipeline"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ '*' ]
|
||||
tags-ignore:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
java: [11, 15]
|
||||
steps:
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK ${{ matrix.java }}
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: ${{ matrix.java }}
|
||||
architecture: x64
|
||||
- name: Cache Maven packages
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.m2
|
||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: ${{ runner.os }}-m2
|
||||
- name: Build with Maven
|
||||
run: mvn clean install
|
||||
notify-slack:
|
||||
if: github.event_name == 'push' && (success() || failure())
|
||||
needs:
|
||||
- build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Slack workflow notification"
|
||||
uses: Gamesight/slack-workflow-status@master
|
||||
with:
|
||||
repo_token: ${{secrets.GITHUB_TOKEN}}
|
||||
slack_webhook_url: ${{secrets.SLACK_WEBHOOK_URL}}
|
143
.github/workflows/release.yml
vendored
@ -2,45 +2,50 @@ name: "Release Pipeline"
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- v*
|
||||
- test* # todo replace with v*
|
||||
jobs:
|
||||
release:
|
||||
if: github.repository == 'WebGoat/WebGoat'
|
||||
name: Release WebGoat
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
environment:
|
||||
name: release
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Set up JDK 23
|
||||
uses: actions/setup-java@v4
|
||||
- name: "Get tag name"
|
||||
id: tag
|
||||
uses: dawidd6/action-get-tag@v1
|
||||
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 23
|
||||
java-version: 11
|
||||
architecture: x64
|
||||
cache: 'maven'
|
||||
|
||||
- name: Cache Maven packages
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.m2
|
||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: ${{ runner.os }}-m2
|
||||
|
||||
- name: "Set labels for ${{ github.ref }}"
|
||||
run: |
|
||||
echo "WEBGOAT_TAG_VERSION=${{ github.ref_name }}" >> $GITHUB_ENV
|
||||
WEBGOAT_MAVEN_VERSION=${{ github.ref_name }}
|
||||
echo "WEBGOAT_MAVEN_VERSION=${WEBGOAT_MAVEN_VERSION:1}" >> $GITHUB_ENV
|
||||
echo "WEBGOAT_TAG_VERSION=${{ steps.tag.outputs.tag }}" >> $GITHUB_ENV
|
||||
echo "WEBGOAT_MAVEN_VERSION=${WEBGOAT_TAG_VERSION:1}" >> $GITHUB_ENV
|
||||
|
||||
- name: Build with Maven
|
||||
run: |
|
||||
mvn --no-transfer-progress versions:set -DnewVersion=${{ env.WEBGOAT_MAVEN_VERSION }}
|
||||
mvn --no-transfer-progress install -DskipTests
|
||||
mvn versions:set ${WEBGOAT_VERSION}
|
||||
mvn clean install -DskipTests
|
||||
|
||||
- name: "Create release"
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
draft: false
|
||||
files: |
|
||||
target/webgoat-${{ env.WEBGOAT_MAVEN_VERSION }}.jar
|
||||
webgoat-server/target/webgoat-server-${WEBGOAT_MAVEN_VERSION}.jar
|
||||
webwolf/target/webwolf-${WEBGOAT_MAVEN_VERSION}.jar
|
||||
body: |
|
||||
## Version ${{ github.ref_name }}
|
||||
## Version ${{ steps.tag.outputs.tag }}
|
||||
|
||||
### New functionality
|
||||
|
||||
@ -50,8 +55,6 @@ jobs:
|
||||
|
||||
- [#743 - Character encoding errors](https://github.com/WebGoat/WebGoat/issues/743)
|
||||
|
||||
Full change log: https://github.com/WebGoat/WebGoat/compare/${{ github.ref_name }}...${{ github.ref_name }}
|
||||
|
||||
|
||||
## Contributors
|
||||
|
||||
@ -66,78 +69,26 @@ jobs:
|
||||
Team WebGoat
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: "Set up QEMU"
|
||||
uses: docker/setup-qemu-action@v3.6.0
|
||||
with:
|
||||
platforms: all
|
||||
|
||||
- name: "Set up Docker Buildx"
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: "Login to dockerhub"
|
||||
uses: docker/login-action@v3.4.0
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: "Build and push WebGoat"
|
||||
uses: docker/build-push-action@v6.16.0
|
||||
with:
|
||||
context: ./
|
||||
file: ./Dockerfile
|
||||
push: true
|
||||
platforms: linux/amd64, linux/arm64
|
||||
tags: |
|
||||
webgoat/webgoat:${{ env.WEBGOAT_TAG_VERSION }}
|
||||
webgoat/webgoat:latest
|
||||
build-args: |
|
||||
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
|
||||
|
||||
- name: "Build and push WebGoat desktop"
|
||||
uses: docker/build-push-action@v6.16.0
|
||||
with:
|
||||
context: ./
|
||||
file: ./Dockerfile_desktop
|
||||
push: true
|
||||
platforms: linux/amd64, linux/arm64
|
||||
tags: |
|
||||
webgoat/webgoat-desktop:${{ env.WEBGOAT_TAG_VERSION }}
|
||||
webgoat/webgoat-desktop:latest
|
||||
build-args: |
|
||||
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
|
||||
new_version:
|
||||
if: github.repository == 'WebGoat/WebGoat'
|
||||
name: Update to next SNAPSHOT version
|
||||
needs: [ release ]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up JDK 23
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 23
|
||||
architecture: x64
|
||||
|
||||
- name: Set version to next snapshot
|
||||
run: |
|
||||
mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}-SNAPSHOT versions:commit
|
||||
|
||||
- name: Push the changes to new branch
|
||||
uses: devops-infra/action-commit-push@v0.10.0
|
||||
with:
|
||||
github_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
add_timestamp: true
|
||||
commit_message: "Updating to the new development version"
|
||||
force: false
|
||||
|
||||
- name: Create PR
|
||||
uses: devops-infra/action-pull-request@v0.6.0
|
||||
with:
|
||||
github_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
title: ${{ github.event.commits[0].message }}
|
||||
target_branch: main
|
||||
- name: "Set up QEMU"
|
||||
uses: docker/setup-qemu-action@v1
|
||||
- name: "Set up Docker Buildx"
|
||||
uses: docker/setup-buildx-action@v1
|
||||
- name: "Login to dockerhub"
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: "Build and push"
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: ./docker
|
||||
file: docker/Dockerfile
|
||||
push: false #todo enable
|
||||
platforms: linux/amd64
|
||||
tags: |
|
||||
webgoat/goatandwolf:${WEBGOAT_TAG_VERSION}
|
||||
# todo webgoat/goatandwolf:latest
|
||||
build-args: |
|
||||
webgoat_version=${WEBGOAT_TAG_VERSION}
|
||||
- name: "Image digest"
|
||||
run: echo ${{ steps.docker_build.outputs.digest }}
|
||||
|
17
.github/workflows/welcome.yml
vendored
@ -1,17 +0,0 @@
|
||||
name: Welcome
|
||||
|
||||
on:
|
||||
issues:
|
||||
types:
|
||||
- opened
|
||||
|
||||
jobs:
|
||||
greeting:
|
||||
if: github.repository == 'WebGoat/WebGoat'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/first-interaction@v1.3.0
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-message: 'Thanks for submitting your first issue, we will have a look as quickly as possible.'
|
||||
pr-message: 'Thanks so much for your contribution, really appreciated! We will have a look and merge it if everything checks out!'
|
9
.gitignore
vendored
@ -39,6 +39,7 @@ UserDatabase.mv.db
|
||||
webgoat-container/src/main/webapp/users/guest.org.owasp.webgoat.plugin.*.props
|
||||
webgoat-container/src/main/webapp/plugin_lessons/dist-*.pom
|
||||
webgoat-lessons/**/target
|
||||
**/*.jar
|
||||
**/.DS_Store
|
||||
webgoat-server/mongo-data/*
|
||||
webgoat-lessons/vulnerable-components/dependency-reduced-pom.xml
|
||||
@ -53,11 +54,3 @@ webgoat.properties
|
||||
webgoat.script
|
||||
TestClass.class
|
||||
**/*.flattened-pom.xml
|
||||
/.gitconfig
|
||||
|
||||
webgoat.gitconfig
|
||||
node_modules/
|
||||
/test-results/
|
||||
/playwright-report/
|
||||
/blob-report/
|
||||
/playwright/.cache/
|
||||
|
BIN
.mvn/wrapper/maven-wrapper.jar
vendored
4
.mvn/wrapper/maven-wrapper.properties
vendored
@ -1,2 +1,2 @@
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
|
||||
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.2.5/apache-maven-3.2.5-bin.zip
|
||||
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar
|
||||
|
@ -1,28 +0,0 @@
|
||||
ci:
|
||||
autofix_commit_msg: |
|
||||
[pre-commit.ci] auto fixes from pre-commit.com hooks
|
||||
autofix_prs: false # managed in the action step
|
||||
autoupdate_branch: ""
|
||||
autoupdate_commit_msg: "[pre-commit.ci] pre-commit autoupdate"
|
||||
autoupdate_schedule: weekly
|
||||
skip: []
|
||||
submodules: false
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v4.4.0
|
||||
hooks:
|
||||
- id: check-yaml
|
||||
- id: end-of-file-fixer
|
||||
exclude: ^(README.md|CREATE_RELEASE.md)
|
||||
- id: trailing-whitespace
|
||||
- repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook
|
||||
rev: v9.5.0
|
||||
hooks:
|
||||
- id: commitlint
|
||||
stages: [commit-msg]
|
||||
- repo: https://github.com/ejba/pre-commit-maven
|
||||
rev: v0.3.4
|
||||
hooks:
|
||||
- id: maven
|
||||
args: [ 'clean compile' ]
|
||||
- id: maven-spotless-apply
|
62
.travis.yml
Normal file
@ -0,0 +1,62 @@
|
||||
services:
|
||||
- docker
|
||||
language: java
|
||||
os:
|
||||
- linux
|
||||
- osx
|
||||
dist: xenial
|
||||
jdk:
|
||||
- openjdk11
|
||||
- openjdk15
|
||||
addons:
|
||||
firefox: latest
|
||||
install:
|
||||
- true
|
||||
script:
|
||||
- export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH;
|
||||
else echo $TRAVIS_PULL_REQUEST_BRANCH; fi)
|
||||
- echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, PR=$PR, BRANCH=$BRANCH"
|
||||
- if [ ! -z "${TRAVIS_TAG}" ]; then mvn versions:set -DnewVersion=${TRAVIS_TAG:1};
|
||||
fi
|
||||
- mvn clean install -q
|
||||
cache:
|
||||
directories:
|
||||
- "$HOME/.m2"
|
||||
before_deploy:
|
||||
- export WEBGOAT_SERVER_TARGET_DIR=$HOME/build/$TRAVIS_REPO_SLUG/webgoat-server/target
|
||||
- export WEBWOLF_TARGET_DIR=$HOME/build/$TRAVIS_REPO_SLUG/webwolf/target
|
||||
- export WEBGOAT_ARTIFACTS_FOLDER=$HOME/build/$TRAVIS_REPO_SLUG/Deployable_Artifacts/
|
||||
- mkdir -p $WEBGOAT_ARTIFACTS_FOLDER
|
||||
- cp -fa $WEBGOAT_SERVER_TARGET_DIR/*.jar $WEBGOAT_ARTIFACTS_FOLDER/
|
||||
- cp -fa $WEBWOLF_TARGET_DIR/*.jar $WEBGOAT_ARTIFACTS_FOLDER/
|
||||
- echo "Contents of artifacts folder:"
|
||||
- ls $WEBGOAT_ARTIFACTS_FOLDER
|
||||
deploy:
|
||||
- provider: script
|
||||
cleanup: false
|
||||
script: bash scripts/deploy-webgoat.sh
|
||||
on:
|
||||
condition: $TRAVIS_OS_NAME == 'linux'
|
||||
jdk: openjdk11
|
||||
tags: true
|
||||
- provider: releases
|
||||
cleanup: false
|
||||
overwrite: true
|
||||
token:
|
||||
secure: pJOLBnl6427PcVg/tVy/qB18JC7b8cKpffau+IP0pjdSt7KUfBdBY3QuJ7mrM65zRoVILzggLckaew2PlRmYQRdumyWlyRn44XiJ9KO4n6Bsufbz+ictB4ggtozpp9+I9IIUh1TmqypL9lhkX2ONM9dSHmyblYpAAgMuYSK8FYc=
|
||||
file_glob: true
|
||||
file: "$WEBGOAT_ARTIFACTS_FOLDER/*"
|
||||
on:
|
||||
condition: $TRAVIS_OS_NAME == 'linux'
|
||||
jdk: openjdk11
|
||||
tags: true
|
||||
env:
|
||||
global:
|
||||
#Docker login
|
||||
- secure: XgPc0UKRTUI70I4YWNQpThPPWeQIxkmzh1GNoR/SSDC2GPIBq3EfkkbSQewqil8stTy+S1/xSzc0JXG8NTn7UOxHVHA/2nhI6jX9E+DKtXQ89YwmaDNQjkbMjziAtDCIex+5TRykxNfkxj6VPYbDssrzI7iJXOIZVj/HoyO3O5E=
|
||||
#Docker password
|
||||
- secure: aly5TKBUK9sIiqtMbytNNPZHQhC0a7Yond5tEtuJ8fO+j/KZB4Uro3I6BhzYjGWFb5Kndd0j2TXHPFvtOl402J1CmFsY3v0BhilQd0g6zOssp5T0A73m8Jgq4ItV8wQJJy2bQsXqL1B+uFYieYPiMchj7JxWW0vBn7TV5b68l6U=
|
||||
notifications:
|
||||
slack:
|
||||
rooms:
|
||||
secure: cDG2URRy7SEipMLyhodwjRBtsPBmfngFB4FyNaIhhr+2/SGyKvGhfW75YA9V+eC7J40KllxQhiIvrxngKDRABb3L1O72Sdj8mZSi8TVsUNLOdamJXHKGUwNSPWXv/1s2m+uC20cgxl66o31vxdV33uvxLdvGOd5e5qOKTsKP7UE=
|
@ -1,60 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
|
||||
- Using welcoming and inclusive language
|
||||
- Being respectful of differing viewpoints and experiences
|
||||
- Gracefully accepting constructive criticism
|
||||
- Focusing on what is best for the community
|
||||
- Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
- The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
- Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
- Public or private harassment
|
||||
- Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
- Misusing the context of the WebGoat project for commercial goals (e.g. adding sales pitches to the codebase or to communication channels used by the project, such as Slack).
|
||||
- Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
## Disclaimer
|
||||
|
||||
The WebGoat project and its materials are conceived for educational and research purposes only.
|
||||
|
||||
Refrain from violating the laws in your country by carefully consulting them before executing any tests against web applications or other assets utilizing the WebGoat (or Webwolf) materials.
|
||||
|
||||
The WebGoat project is also NOT supporting unethical activities in any way. If you come across such requests, please reach out to the project leaders and raise this to them.
|
||||
|
||||
Neither OWASP, the WebGoat project leaders, authors or anyone else involved in this project is going to take responsibility for your actions.
|
||||
|
||||
The intention of the WebGoat is not to encourage hacking or malicious activities! Instead, the goal of the project is to learn different hacking techniques and offer ways to reduce or mitigate that risk.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community includes using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at nanne.baars@owasp.org.
|
||||
|
||||
All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org "Contributor Covenant homepage"), [version 1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html "Code of Conduct version 1.4").
|
||||
|
||||
For answers to common questions about this code of conduct, see [the Contributor Covenant FAQ](https://www.contributor-covenant.org/faq)
|
119
CONTRIBUTING.md
@ -1,119 +0,0 @@
|
||||
# Contributing
|
||||
|
||||
[](https://github.com/WebGoat/WebGoat/graphs/contributors)
|
||||

|
||||

|
||||
[](https://conventionalcommits.org)
|
||||
|
||||
This document describes how you can contribute to WebGoat. Please read it carefully.
|
||||
|
||||
**Table of Contents**
|
||||
|
||||
* [How to Contribute to the Project](#how-to-contribute-to-the-project)
|
||||
* [How to set up your Contributor Environment](#how-to-set-up-your-contributor-environment)
|
||||
* [How to get your PR Accepted](#how-to-get-your-pr-accepted)
|
||||
|
||||
## How to Contribute to the project
|
||||
|
||||
There are a couple of ways on how you can contribute to the project:
|
||||
|
||||
* **File [issues](https://github.com/WebGoat/WebGoat/issues "Webgoat Issues")** for missing content or errors. Explain what you think is missing and give a suggestion as to where it could be added.
|
||||
* **Create a [pull request (PR)](https://github.com/WebGoat/WebGoat/pulls "Create a pull request")**. This is a direct contribution to the project and may be merged after review. You should ideally [create an issue](https://github.com/WebGoat/WebGoat/issues "WebGoat Issues") for any PR you would like to submit, as we can first review the merit of the PR and avoid any unnecessary work. This is of course not needed for small modifications such as correcting typos.
|
||||
* **Help out financially** by donating via [OWASP donations](https://owasp.org/donate/?reponame=www-project-webgoat&title=OWASP+WebGoat).
|
||||
|
||||
## How to get your PR accepted
|
||||
|
||||
Your PR is valuable to us, and to make sure we can integrate it smoothly, we have a few items for you to consider. In short:
|
||||
The minimum requirements for code contributions are:
|
||||
|
||||
1. The code _must_ be compliant with the configured Java Google Formatter, Checkstyle and PMD rules.
|
||||
2. All new and changed code _should_ have a corresponding unit and/or integration test.
|
||||
3. New and changed lessons _must_ have a corresponding integration test.
|
||||
4. [Status checks](https://docs.github.com/en/github/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks) should pass for your last commit.
|
||||
|
||||
Additionally, the following guidelines can help:
|
||||
|
||||
### Keep your pull requests limited to a single issue
|
||||
|
||||
Pull requests should be as small/atomic as possible. Large, wide-sweeping changes in a pull request will be **rejected**, with comments to isolate the specific code in your pull request. Some examples:
|
||||
|
||||
* If you are making spelling corrections in the docs, don't modify other files.
|
||||
* If you are adding new functions don't '*cleanup*' unrelated functions. That cleanup belongs in another pull request.
|
||||
|
||||
### Write a good commit message
|
||||
|
||||
* We use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) and use the following types:
|
||||
|
||||
- fix:
|
||||
- feat:
|
||||
- build:
|
||||
- chore:
|
||||
- ci:
|
||||
- docs:
|
||||
- refactor:
|
||||
- test:
|
||||
|
||||
Using this style of commits makes it possible to create our release notes automatically.
|
||||
|
||||
* Explain why you make the changes. [More infos about a good commit message.](https://betterprogramming.pub/stop-writing-bad-commit-messages-8df79517177d)
|
||||
|
||||
* If you fix an issue with your commit, please close the issue by [adding one of the keywords and the issue number](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) to your commit message.
|
||||
|
||||
For example: `Fix #545` or `Closes #10`
|
||||
|
||||
## How to set up your Contributor Environment
|
||||
|
||||
1. Create a GitHub account. Multiple different GitHub subscription plans are available, but you only need a free one. Follow [these steps](https://help.github.com/en/articles/signing-up-for-a-new-github-account "Signing up for a new GitHub account") to set up your account.
|
||||
2. Fork the repository. Creating a fork means creating a copy of the repository on your own account, which you can modify without any impact on this repository. GitHub has an [article that describes all the needed steps](https://help.github.com/en/articles/fork-a-repo "Fork a repo").
|
||||
3. Clone your own repository to your host computer so that you can make modifications. If you followed the GitHub tutorial from step 2, you have already done this.
|
||||
4. Go to the newly cloned directory "WebGoat" and add the remote upstream repository:
|
||||
|
||||
```bash
|
||||
$ git remote -v
|
||||
origin git@github.com:<your Github handle>/WebGoat.git (fetch)
|
||||
origin git@github.com:<your Github handle>/WebGoat.git (push)
|
||||
|
||||
$ git remote add upstream git@github.com:WebGoat/WebGoat.git
|
||||
|
||||
$ git remote -v
|
||||
origin git@github.com:<your Github handle>/WebGoat.git (fetch)
|
||||
origin git@github.com:<your Github handle>/WebGoat.git (push)
|
||||
upstream git@github.com:OWASP/WebGoat.git (fetch)
|
||||
upstream git@github.com:OWASP/WebGoat.git (push)
|
||||
```
|
||||
|
||||
See also the GitHub documentation on "[Configuring a remote for a fork](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork "Configuring a remote for a fork")".
|
||||
|
||||
5. Choose what to work on, based on any of the outstanding [issues](https://github.com/WebGoat/WebGoat/issues "WebGoat Issues").
|
||||
|
||||
6. Create a branch so that you can cleanly work on the chosen issue: `git checkout -b FixingIssue66`
|
||||
|
||||
7. Open your favorite editor and start making modifications. We recommend using the [IntelliJ Idea](https://www.jetbrains.com/idea/).
|
||||
|
||||
8. After your modifications are done, push them to your forked repository. This can be done by executing the command `git add MYFILE` for every file you have modified, followed by `git commit -m 'your commit message here'` to commit the modifications and `git push` to push your modifications to GitHub.
|
||||
|
||||
9. Create a Pull Request (PR) by going to your fork, <https://github.com/Your_Github_Handle/WebGoat> and click on the "New Pull Request" button. The target branch should typically be the Master branch. When submitting a PR, be sure to follow the checklist that is provided in the PR template. The checklist itself will be filled out by the reviewer.
|
||||
|
||||
10. Your PR will be reviewed and comments may be given. In order to process a comment, simply make modifications to the same branch as before and push them to your repository. GitHub will automatically detect these changes and add them to your existing PR.
|
||||
|
||||
11. When starting on a new PR in the future, make sure to always keep your local repo up to date:
|
||||
|
||||
```bash
|
||||
$ git fetch upstream
|
||||
$ git merge upstream/main
|
||||
```
|
||||
|
||||
See also the following article for further explanation on "[How to Keep a Downstream git Repository Current with Upstream Repository Changes](https://medium.com/sweetmeat/how-to-keep-a-downstream-git-repository-current-with-upstream-repository-changes-10b76fad6d97 "How to Keep a Downstream git Repository Current with Upstream Repository Changes")".
|
||||
|
||||
If at any time you want to work on a different issue, you can simply switch to a different branch, as explained in step 5.
|
||||
|
||||
> Tip: Don't try to work on too many issues at once though, as it will be a lot more difficult to merge branches the longer they are open.
|
||||
|
||||
## What not to do
|
||||
|
||||
Although we greatly appreciate any and all contributions to the project, there are a few things that you should take into consideration:
|
||||
|
||||
* The WebGoat project should not be used as a platform for advertisement for commercial tools, companies or individuals. Write-ups should be written with free and open-source tools in mind and commercial tools are typically not accepted, unless as a reference in the security tools section.
|
||||
* Unnecessary self-promotion of tools or blog posts is frowned upon. If you have a relation with on of the URLs or tools you are referencing, please state so in the PR so that we can verify that the reference is in line with the rest of the guide.
|
||||
|
||||
Please be sure to take a careful look at our [Code of Conduct](https://github.com/WebGoat/WebGoat/blob/master/CODE_OF_CONDUCT.md) for all the details.
|
@ -1,9 +1,6 @@
|
||||
This file is part of WebGoat, an Open Web Application Security Project utility. For details, please see http://www.owasp.org/
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
Copyright (c) 2002 - 2016 Bruce Mayhew
|
||||
Copyright (c) 2014 - $today.year Nanne Baars
|
||||
Copyright (c) 2002 - $today.year Bruce Mayhew
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||
GNU General Public License as published by the Free Software Foundation; either version 2 of the
|
||||
@ -19,4 +16,4 @@ not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, B
|
||||
|
||||
Getting Source ==============
|
||||
|
||||
Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository for free software projects.
|
||||
Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository for free software projects.
|
35
CREATE_RELEASE.MD
Normal file
@ -0,0 +1,35 @@
|
||||
## Release WebGoat
|
||||
|
||||
|
||||
### Version numbers
|
||||
|
||||
For WebGoat we use milestone releases first before we release the official version, we use `v8.0.0.M3` while tagging
|
||||
and 8.0.0.M3 in the `pom.xml`. When we create the final release we remove the milestone release and use
|
||||
`v8.0.0` in the `pom.xml`
|
||||
|
||||
### Release notes:
|
||||
Update the release notes with the correct version. Use `git shortlog -s -n --since "SEP 31 2019"` for the list of
|
||||
committers.
|
||||
|
||||
At the moment we use Gitflow, for a release you create a new release branch and take the following steps:
|
||||
|
||||
```
|
||||
git checkout develop
|
||||
git flow release start <version>
|
||||
mvn versions:set <<version>
|
||||
git commit -am "New release, updating pom.xml"
|
||||
git flow release publish
|
||||
|
||||
<<Make changes if necessary>>
|
||||
|
||||
git flow release finish <version>
|
||||
git push origin develop
|
||||
git push origin master
|
||||
git push --tags
|
||||
```
|
||||
|
||||
Now Travis takes over and will create the release in Github and on Docker Hub.
|
||||
|
||||
NOTE: the `mvn versions:set` command above is just there to make sure the master branch contains the latest version
|
||||
|
||||
|
@ -1,26 +0,0 @@
|
||||
## Release WebGoat
|
||||
|
||||
### Version numbers
|
||||
|
||||
For WebGoat we use milestone releases first before we release the official version, we use `v2023.01` while tagging
|
||||
and 2023.01 in the `pom.xml`.
|
||||
|
||||
### Release notes:
|
||||
|
||||
Update the release notes with the correct version. Use `git shortlog -s -n --since "JAN 06 2023"` for the list of
|
||||
committers. In order to fetch the list of issues included use:
|
||||
`git log --graph --pretty='%C(auto)%d%Creset%s' v2023.4..origin/main`
|
||||
|
||||
```
|
||||
mvn versions:set
|
||||
<< update release notes >>
|
||||
mvn verify
|
||||
git commit ....
|
||||
git tag v2023.01
|
||||
git push --tags
|
||||
git push
|
||||
```
|
||||
|
||||
After the release has been tagged and the build process is done. The release notes should be updated in the GitHub
|
||||
release page.
|
||||
|
40
Dockerfile
@ -1,40 +0,0 @@
|
||||
# We need JDK as some of the lessons needs to be able to compile Java code
|
||||
FROM docker.io/eclipse-temurin:23-jdk-noble
|
||||
|
||||
LABEL name="WebGoat: A deliberately insecure Web Application"
|
||||
LABEL maintainer="WebGoat team"
|
||||
|
||||
RUN \
|
||||
useradd -ms /bin/bash webgoat && \
|
||||
chgrp -R 0 /home/webgoat && \
|
||||
chmod -R g=u /home/webgoat
|
||||
|
||||
USER webgoat
|
||||
|
||||
COPY --chown=webgoat target/webgoat-*.jar /home/webgoat/webgoat.jar
|
||||
|
||||
EXPOSE 8080
|
||||
EXPOSE 9090
|
||||
|
||||
ENV TZ=Europe/Amsterdam
|
||||
|
||||
WORKDIR /home/webgoat
|
||||
ENTRYPOINT [ "java", \
|
||||
"-Duser.home=/home/webgoat", \
|
||||
"-Dfile.encoding=UTF-8", \
|
||||
"--add-opens", "java.base/java.lang=ALL-UNNAMED", \
|
||||
"--add-opens", "java.base/java.util=ALL-UNNAMED", \
|
||||
"--add-opens", "java.base/java.lang.reflect=ALL-UNNAMED", \
|
||||
"--add-opens", "java.base/java.text=ALL-UNNAMED", \
|
||||
"--add-opens", "java.desktop/java.beans=ALL-UNNAMED", \
|
||||
"--add-opens", "java.desktop/java.awt.font=ALL-UNNAMED", \
|
||||
"--add-opens", "java.base/sun.nio.ch=ALL-UNNAMED", \
|
||||
"--add-opens", "java.base/java.io=ALL-UNNAMED", \
|
||||
"--add-opens", "java.base/java.util=ALL-UNNAMED", \
|
||||
"--add-opens", "java.base/sun.nio.ch=ALL-UNNAMED", \
|
||||
"--add-opens", "java.base/java.io=ALL-UNNAMED", \
|
||||
"-Drunning.in.docker=true", \
|
||||
"-jar", "webgoat.jar", "--server.address", "0.0.0.0" ]
|
||||
|
||||
HEALTHCHECK --interval=5s --timeout=3s \
|
||||
CMD curl --fail http://localhost:8080/WebGoat/actuator/health || exit 1
|
@ -1,47 +0,0 @@
|
||||
FROM lscr.io/linuxserver/webtop:ubuntu-xfce
|
||||
LABEL name="WebGoat: A deliberately insecure Web Application"
|
||||
LABEL maintainer="WebGoat team"
|
||||
|
||||
WORKDIR /config
|
||||
|
||||
COPY target/webgoat-*.jar /config/webgoat.jar
|
||||
COPY config/desktop/start_webgoat.sh /config/start_webgoat.sh
|
||||
COPY config/desktop/start_zap.sh /config/start_zap.sh
|
||||
COPY config/desktop/WebGoat.txt /config/Desktop/
|
||||
|
||||
RUN \
|
||||
apt-get update && \
|
||||
apt-get --yes install vim nano gzip
|
||||
|
||||
RUN \
|
||||
case $(uname -m) in \
|
||||
x86_64) ARCH=x64;; \
|
||||
aarch64) ARCH=aarch64;; \
|
||||
*) ARCH=unknown;; \
|
||||
esac && \
|
||||
echo ${ARCH}
|
||||
|
||||
RUN \
|
||||
curl -LO https://github.com/zaproxy/zaproxy/releases/download/v2.15.0/ZAP_2.15.0_Linux.tar.gz && \
|
||||
tar zfxv ZAP_2.15.0_Linux.tar.gz && \
|
||||
rm -rf ZAP_2.15.0_Linux.tar.gz
|
||||
|
||||
RUN \
|
||||
case $(uname -m) in \
|
||||
x86_64) ARCH=x64;; \
|
||||
aarch64) ARCH=aarch64;; \
|
||||
*) ARCH=unknown;; \
|
||||
esac && \
|
||||
echo "oeps == ${ARCH}==" && \
|
||||
curl -L https://github.com/adoptium/temurin23-binaries/releases/download/jdk-23.0.1%2B11/OpenJDK23U-jre_"${ARCH}"_linux_hotspot_23.0.1_11.tar.gz -o java.tar.gz && \
|
||||
tar zfxv java.tar.gz && \
|
||||
rm -rf java.tar.gz && \
|
||||
chmod +x /config/start_webgoat.sh && \
|
||||
chmod +x /config/start_zap.sh && \
|
||||
mv /config/jdk-23.0.1+11-jre /config/java-jdk && \
|
||||
echo "JAVA_HOME=/config/java-jdk/" >> .bash_aliases && \
|
||||
echo "PATH=$PATH:$JAVA_HOME/bin" >> .bash_aliases
|
||||
|
||||
ENV JAVA_HOME=/config/java-jdk
|
||||
|
||||
WORKDIR /config/Desktop
|
7
FAQ.md
@ -1,7 +0,0 @@
|
||||
# FAQ for development
|
||||
|
||||
## Introduction
|
||||
|
||||
### Integration tests fail
|
||||
|
||||
Try to run the command in the console `java -jar ...` and remove `-Dlogging.pattern.console=` from the command line.
|
@ -1,9 +1,6 @@
|
||||
This file is part of WebGoat, an Open Web Application Security Project utility. For details, please see http://www.owasp.org/
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
Copyright (c) 2002 - $today.year Bruce Mayhew
|
||||
Copyright (c) 2014 - $today.year Nanne Baars
|
||||
Copyright (c) 2002 - 2019 Bruce Mayhew
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||
GNU General Public License as published by the Free Software Foundation; either version 2 of the
|
||||
@ -19,4 +16,4 @@ not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, B
|
||||
|
||||
Getting Source ==============
|
||||
|
||||
Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository for free software projects.
|
||||
Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository for free software projects.
|
@ -1 +0,0 @@
|
||||
Thank you for submitting a pull request to the WebGoat!
|
146
README.MD
Normal file
@ -0,0 +1,146 @@
|
||||
# WebGoat 8: A deliberately insecure Web Application
|
||||
|
||||
[](https://travis-ci.org/WebGoat/WebGoat)
|
||||
[](https://coveralls.io/github/WebGoat/WebGoat?branch=master)
|
||||
[](https://www.codacy.com/app/dm/WebGoat)
|
||||
[](https://www.owasp.org/index.php/OWASP_Project_Inventory#tab=Labs_Projects)
|
||||
[](https://github.com/WebGoat/WebGoat/releases/latest)
|
||||
[](https://gitter.im/OWASPWebGoat/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||
|
||||
# Introduction
|
||||
|
||||
WebGoat is a deliberately insecure web application maintained by [OWASP](http://www.owasp.org/) designed to teach web
|
||||
application security lessons.
|
||||
|
||||
This program is a demonstration of common server-side application flaws. The
|
||||
exercises are intended to be used by people to learn about application security and
|
||||
penetration testing techniques.
|
||||
|
||||
**WARNING 1:** *While running this program your machine will be extremely
|
||||
vulnerable to attack. You should disconnect from the Internet while using
|
||||
this program.* WebGoat's default configuration binds to localhost to minimize
|
||||
the exposure.
|
||||
|
||||
**WARNING 2:** *This program is for educational purposes only. If you attempt
|
||||
these techniques without authorization, you are very likely to get caught. If
|
||||
you are caught engaging in unauthorized hacking, most companies will fire you.
|
||||
Claiming that you were doing security research will not work as that is the
|
||||
first thing that all hackers claim.*
|
||||
|
||||
# Installation Instructions:
|
||||
|
||||
## 1. Run using Docker
|
||||
|
||||
Every release is also published on [DockerHub]((https://hub.docker.com/r/webgoat/webgoat-8.0/)).
|
||||
|
||||
### Using docker run
|
||||
|
||||
The easiest way to start WebGoat as a Docker container is to use the all-in-one docker container. This is a docker image that has WebGoat and WebWolf running inside.
|
||||
|
||||
```shell
|
||||
docker run -p 8080:8080 -p 9090:9090 -e TZ=Europe/Amsterdam webgoat/goatandwolf
|
||||
```
|
||||
|
||||
WebGoat will be located at: http://127.0.0.1:8080/WebGoat
|
||||
WebWolf will be located at: http://127.0.0.1:9090/WebWolf
|
||||
|
||||
**Important**: Choose the correct timezone, so that the docker container and your host are in the same timezone. As it important for the validity of JWT tokens used in certain exercises.
|
||||
|
||||
### Using docker stack deploy
|
||||
|
||||
Another way to deply WebGoat and WebWolf in a more advanced way is to use a compose-file in a docker stack deploy.
|
||||
You can define which containers should run in which combinations and define all of this in a yaml file.
|
||||
An example of such a file is: [goat-with-reverseproxy.yaml](goat-with-reverseproxy.yaml)
|
||||
|
||||
This sets up an nginx webserver as reverse proxy to WebGoat and WebWolf. You can change the timezone by adjusting the value in the yaml file.
|
||||
|
||||
```shell
|
||||
docker stack init
|
||||
docker stack deploy --compose-file goat-with-reverseproxy.yaml webgoatdemo
|
||||
```
|
||||
|
||||
Add the following entries in your local hosts file:
|
||||
|
||||
```shell
|
||||
127.0.0.1 www.webgoat.local www.webwolf.localhost
|
||||
```
|
||||
|
||||
You can use the overall start page: http://www.webgoat.local or:
|
||||
|
||||
WebGoat will be located at: http://www.webgoat.local/WebGoat
|
||||
|
||||
WebWolf will be located at: http://www.webwolf.local/WebWolf
|
||||
|
||||
**Important**: the current directory on your host will be mapped into the container for keeping state.
|
||||
|
||||
## 2. Standalone
|
||||
|
||||
Download the latest WebGoat and WebWolf release from [https://github.com/WebGoat/WebGoat/releases](https://github.com/WebGoat/WebGoat/releases)
|
||||
|
||||
```Shell
|
||||
java -jar webgoat-server-8.1.0.jar [--server.port=8080] [--server.address=localhost]
|
||||
java -jar webwolf-8.1.0.jar [--server.port=9090] [--server.address=localhost]
|
||||
```
|
||||
|
||||
The latest version of WebGoat needs Java 11 or above. By default WebGoat and WebWolf start on port 8080,9000 and 9090 with the environment variable WEBGOAT_PORT, WEBWOLF_PORT and WEBGOAT_HSQLPORT you can set different values.
|
||||
```Shell
|
||||
export WEBGOAT_PORT=18080
|
||||
export WEBGOAT_HSQLPORT=19001
|
||||
export WEBWOLF_PORT=19090
|
||||
java -jar webgoat-server-8.1.0.jar
|
||||
java -jar webwolf-8.1.0.jar
|
||||
```
|
||||
Use set in stead of export on Windows cmd.
|
||||
|
||||
|
||||
## 3. Run from the sources
|
||||
|
||||
### Prerequisites:
|
||||
|
||||
* Java 11
|
||||
* Maven > 3.2.1
|
||||
* Your favorite IDE
|
||||
* Git, or Git support in your IDE
|
||||
|
||||
Open a command shell/window:
|
||||
|
||||
```Shell
|
||||
git clone git@github.com:WebGoat/WebGoat.git
|
||||
```
|
||||
|
||||
Now let's start by compiling the project.
|
||||
|
||||
```Shell
|
||||
cd WebGoat
|
||||
git checkout <<branch_name>>
|
||||
mvn clean install
|
||||
```
|
||||
|
||||
Now we are ready to run the project. WebGoat 8.x is using Spring-Boot.
|
||||
|
||||
```Shell
|
||||
mvn -pl webgoat-server spring-boot:run
|
||||
```
|
||||
... you should be running webgoat on localhost:8080/WebGoat momentarily
|
||||
|
||||
|
||||
To change IP address add the following variable to WebGoat/webgoat-container/src/main/resources/application.properties file
|
||||
|
||||
```
|
||||
server.address=x.x.x.x
|
||||
```
|
||||
|
||||
## 4. Run with custom menu
|
||||
|
||||
For specialist only. There is a way to set up WebGoat with a personalized menu. You can leave out some menu categories or individual lessons by setting environment variables.
|
||||
|
||||
For instance running as a jar on a Linux/MacOS it will look like:
|
||||
```Shell
|
||||
export EXCLUDE_CATEGORIES="CLIENT_SIDE,GENERAL,CHALLENGE"
|
||||
export EXCLUDE_LESSONS="SqlInjectionAdvanced,SqlInjectionMitigations"
|
||||
java -jar webgoat-server/target/webgoat-server-v8.2.0-SNAPSHOT.jar
|
||||
```
|
||||
Or in a docker run it would (once this version is pushed into docker hub) look like:
|
||||
```Shell
|
||||
docker run -d -p 80:8888 -p 8080:8080 -p 9090:9090 -e TZ=Europe/Amsterdam -e EXCLUDE_CATEGORIES="CLIENT_SIDE,GENERAL,CHALLENGE" -e EXCLUDE_LESSONS="SqlInjectionAdvanced,SqlInjectionMitigations" webgoat/goatandwolf
|
||||
```
|
165
README.md
@ -1,165 +0,0 @@
|
||||
# WebGoat: A deliberately insecure Web Application
|
||||
|
||||
[](https://github.com/WebGoat/WebGoat/actions/workflows/build.yml)
|
||||
[](https://jdk.java.net/)
|
||||
[](https://owasp.org/projects/)
|
||||
[](https://github.com/WebGoat/WebGoat/releases/latest)
|
||||
[](https://gitter.im/OWASPWebGoat/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||
[](https://github.com/WebGoat/WebGoat/discussions)
|
||||
[](https://conventionalcommits.org)
|
||||
|
||||
# Introduction
|
||||
|
||||
WebGoat is a deliberately insecure web application maintained by [OWASP](http://www.owasp.org/) designed to teach web
|
||||
application security lessons.
|
||||
|
||||
This program is a demonstration of common server-side application flaws. The
|
||||
exercises are intended to be used by people to learn about application security and
|
||||
penetration testing techniques.
|
||||
|
||||
**WARNING 1:** *While running this program your machine will be extremely
|
||||
vulnerable to attack. You should disconnect from the Internet while using
|
||||
this program.* WebGoat's default configuration binds to localhost to minimize
|
||||
the exposure.
|
||||
|
||||
**WARNING 2:** *This program is for educational purposes only. If you attempt
|
||||
these techniques without authorization, you are very likely to get caught. If
|
||||
you are caught engaging in unauthorized hacking, most companies will fire you.
|
||||
Claiming that you were doing security research will not work as that is the
|
||||
first thing that all hackers claim.*
|
||||
|
||||

|
||||
|
||||
# Installation instructions:
|
||||
|
||||
For more details check [the Contribution guide](/CONTRIBUTING.md)
|
||||
|
||||
## 1. Run using Docker
|
||||
|
||||
Already have a browser and ZAP and/or Burp installed on your machine in this case you can run the WebGoat image directly using Docker.
|
||||
|
||||
Every release is also published on [DockerHub](https://hub.docker.com/r/webgoat/webgoat).
|
||||
|
||||
```shell
|
||||
docker run -it -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 webgoat/webgoat
|
||||
```
|
||||
|
||||
For some lessons you need the container run in the same timezone. For this you can set the TZ environment variable.
|
||||
E.g.
|
||||
|
||||
```shell
|
||||
docker run -it -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 -e TZ=America/Boise webgoat/webgoat
|
||||
```
|
||||
|
||||
If you want to use OWASP ZAP or another proxy, you can no longer use 127.0.0.1 or localhost. but
|
||||
you can use custom host entries. For example:
|
||||
|
||||
```shell
|
||||
127.0.0.1 www.webgoat.local www.webwolf.local
|
||||
```
|
||||
|
||||
Then you can run the container with:
|
||||
|
||||
```shell
|
||||
docker run -it -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 -e WEBGOAT_HOST=www.webgoat.local -e WEBWOLF_HOST=www.webwolf.local -e TZ=America/Boise webgoat/webgoat
|
||||
```
|
||||
|
||||
Then visit http://www.webgoat.local:8080/WebGoat/ and http://www.webwolf.local:9090/WebWolf/
|
||||
|
||||
## 2. Run using Docker with complete Linux Desktop
|
||||
|
||||
Instead of installing tools locally we have a complete Docker image based on running a desktop in your browser. This way you only have to run a Docker image which will give you the best user experience.
|
||||
|
||||
```shell
|
||||
docker run -p 127.0.0.1:3000:3000 webgoat/webgoat-desktop
|
||||
```
|
||||
|
||||
## 3. Standalone
|
||||
|
||||
Download the latest WebGoat release from [https://github.com/WebGoat/WebGoat/releases](https://github.com/WebGoat/WebGoat/releases)
|
||||
|
||||
```shell
|
||||
export TZ=Europe/Amsterdam # or your timezone
|
||||
java -Dfile.encoding=UTF-8 -jar webgoat-2023.8.jar
|
||||
```
|
||||
|
||||
Click the link in the log to start WebGoat.
|
||||
|
||||
### 3.1 Running on a different port
|
||||
|
||||
If for some reason you want to run WebGoat on a different port, you can do so by adding the following parameter:
|
||||
|
||||
```shell
|
||||
java -jar webgoat-2023.8.jar --webgoat.port=8001 --webwolf.port=8002
|
||||
```
|
||||
|
||||
For a full overview of all the parameters you can use, please check the [WebGoat properties file](webgoat-container/src/main/resources/application-{webgoat, webwolf}.properties).
|
||||
|
||||
## 4. Run from the sources
|
||||
|
||||
### Prerequisites:
|
||||
|
||||
* Java 23
|
||||
* Your favorite IDE
|
||||
* Git, or Git support in your IDE
|
||||
|
||||
Open a command shell/window:
|
||||
|
||||
```Shell
|
||||
git clone git@github.com:WebGoat/WebGoat.git
|
||||
```
|
||||
|
||||
Now let's start by compiling the project.
|
||||
|
||||
```Shell
|
||||
cd WebGoat
|
||||
git checkout <<branch_name>>
|
||||
# On Linux/Mac:
|
||||
./mvnw clean install
|
||||
|
||||
# On Windows:
|
||||
./mvnw.cmd clean install
|
||||
|
||||
# Using docker or podman, you can than build the container locally
|
||||
docker build -f Dockerfile . -t webgoat/webgoat
|
||||
```
|
||||
|
||||
Now we are ready to run the project. WebGoat is using Spring Boot.
|
||||
|
||||
```Shell
|
||||
# On Linux/Mac:
|
||||
./mvnw spring-boot:run
|
||||
# On Windows:
|
||||
./mvnw.cmd spring-boot:run
|
||||
|
||||
```
|
||||
|
||||
... you should be running WebGoat on http://localhost:8080/WebGoat momentarily.
|
||||
|
||||
Note: The above link will redirect you to login page if you are not logged in. LogIn/Create account to proceed.
|
||||
|
||||
To change the IP address add the following variable to the `WebGoat/webgoat-container/src/main/resources/application.properties` file:
|
||||
|
||||
```
|
||||
server.address=x.x.x.x
|
||||
```
|
||||
|
||||
## 4. Run with custom menu
|
||||
|
||||
For specialist only. There is a way to set up WebGoat with a personalized menu. You can leave out some menu categories or individual lessons by setting certain environment variables.
|
||||
|
||||
For instance running as a jar on a Linux/macOS it will look like this:
|
||||
|
||||
```Shell
|
||||
export TZ=Europe/Amsterdam # or your timezone
|
||||
export EXCLUDE_CATEGORIES="CLIENT_SIDE,GENERAL,CHALLENGE"
|
||||
export EXCLUDE_LESSONS="SqlInjectionAdvanced,SqlInjectionMitigations"
|
||||
java -jar target/webgoat-2023.8-SNAPSHOT.jar
|
||||
```
|
||||
|
||||
Or in a docker run it would (once this version is pushed into docker hub) look like this:
|
||||
|
||||
```Shell
|
||||
docker run -d -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 -e EXCLUDE_CATEGORIES="CLIENT_SIDE,GENERAL,CHALLENGE" -e EXCLUDE_LESSONS="SqlInjectionAdvanced,SqlInjectionMitigations" webgoat/webgoat
|
||||
```
|
||||
|
@ -1,34 +0,0 @@
|
||||
# Multi language support in WebGoat
|
||||
|
||||
WebGoat is mainly written in English, but it does support multiple languages.
|
||||
|
||||
## Default language selection
|
||||
|
||||
1. Current supported languages are: en, fr, de, nl
|
||||
2. The primary language is based on the language setting of the browser.
|
||||
3. If the language is not in the list of supported language, the language is English
|
||||
4. Once logged in, you can switch between the supported languages using a language dropdown menu on the main page
|
||||
1. After switching a language you are back at the Introduction page
|
||||
|
||||
## Adding a new language
|
||||
|
||||
The following steps are required when you want to add a new language
|
||||
|
||||
1. Update [main_new.html](src/main/resources/webgoat/static/main_new.html)
|
||||
1. Add the parts for showing the flag and providing the correct value for the flag= parameter
|
||||
2.
|
||||
2. Add a flag image to src/main/resources/webgoat/static/css/img
|
||||
1. See the main_new.html for a link to download flag resources
|
||||
3. Add a welcome page to the introduction lesson
|
||||
1. Copy Introduction_.adoc to Introduction_es.adoc (if in this case you want to add Spanish)
|
||||
2. Add a highlighted section that explains that most parts of WebGoat will still be in English and invite people to translate parts where it would be valuable
|
||||
4. Translate the main labels
|
||||
1. Copy messages.properties to messages_es.properties (if in this case you want to add Spanish)
|
||||
2. Translate the label values
|
||||
5. Optionally translate lessons by
|
||||
1. Adding lang specifc adoc files in documentation folder of the lesson
|
||||
2. Adding WebGoatLabels.properties of a specific language if you want to
|
||||
6. Run mvn clean to see if the LabelAndHintIntegration test passes
|
||||
7. Run WebGoat and verify that your own language and the other languages work as expected
|
||||
|
||||
If you only want to translate more for a certain language, you only need to do step 4-8
|
296
RELEASE_NOTES.md
@ -1,265 +1,4 @@
|
||||
# WebGoat release notes
|
||||
|
||||
## Version 2025.3
|
||||
|
||||
### 🐞 Bug fixes
|
||||
|
||||
- Changed URLs imply other exclusion filters for ZAP (#2052)
|
||||
- XSS lesson stage 12 (2 issues) (#1178)
|
||||
|
||||
### 🔄 Technical tasks
|
||||
|
||||
- bump docker/setup-qemu-action from 3.4.0 to 3.6.0 (#2049)
|
||||
- bump docker/build-push-action from 6.14.0 to 6.15.0 (#2050)
|
||||
|
||||
## Version 2025.2
|
||||
|
||||
### 🐞 Bug fixes
|
||||
|
||||
- Fix SQL advanced lesson assignment 5 (#2047)
|
||||
|
||||
## Version 2025.1
|
||||
|
||||
### 🚀 New functionality
|
||||
|
||||
- Introduce Playwright for UI testing
|
||||
- Refactoring of core code
|
||||
|
||||
### 🐞 Bug fixes
|
||||
|
||||
- Introduce assignment progress (#2043)
|
||||
- Add test case for multiple users solving lessons (#2043)
|
||||
- Register user while already logged in as other user. (#2042)
|
||||
- Small updates and improvements in HTTP Basic lesson (#2024)
|
||||
- Improve HTTP basics lesson
|
||||
- Solve compiler warnings
|
||||
- Cleanup attack result and builder
|
||||
- Format all code according to SPDX
|
||||
- Fixed one invalid solution about CSRF attack (#2010)
|
||||
- Reset a lesson no longer removes all assignments
|
||||
- Hint labels showing default text regardless of localization (#1965)
|
||||
- Automatically solve XSS mitigation (#1957)
|
||||
- Remove implicit context path guessing (#1956)
|
||||
- JWT kid/jku lessons (#1949)
|
||||
- Fix password reset lesson (#1941)
|
||||
- Fix passing command line arguments (#1933)
|
||||
- Use banners correctly
|
||||
- Show boolean operators priority on `where` (#1902)
|
||||
- Remove WebGoat session object (#1929)
|
||||
- Reset form and quiz color on reset lesson (#1903)
|
||||
- XSS lesson typo
|
||||
- Copying file using `transferTo` sometimes fails. (#1862)
|
||||
- Fix report card (#1845)
|
||||
- Success if only Smith earn most salary (#1744)
|
||||
- Update HttpBasics_plan.adoc - fix broken link to https://www.zaproxy.org/ (#1803)
|
||||
- Move CSRF to A3 (#1776)
|
||||
- Fix typo in SQLi blind case
|
||||
- Use $ instead of jQuery which is undefined (#1736)
|
||||
- Fix hidden links in MissingFunctionAC.html. (#1710)
|
||||
|
||||
### 🔄 Technical tasks
|
||||
|
||||
- Lots of dependency updates
|
||||
|
||||
## Contributors
|
||||
|
||||
Special thanks to the following contributors providing us with a pull request:
|
||||
|
||||
- François Capon
|
||||
- GoogTech HackHuang
|
||||
- Peter Potrowl
|
||||
- cap-dev0x
|
||||
- Benjamin Mouncer
|
||||
- Jeong Rok Suh
|
||||
- Rui Melo
|
||||
- Vandeputte Brice
|
||||
|
||||
## Version 2023.8
|
||||
|
||||
### 🚀 New functionality
|
||||
|
||||
- Consistent environment values and url references (#1677)
|
||||
- Show directly requested file in requests overview
|
||||
- Show creating time in file upload overview
|
||||
|
||||
### 🐞 Bug fixes
|
||||
|
||||
- Fix startup message (#1687)
|
||||
- Fix/state of software supply chain links (#1683)
|
||||
- Fix WebWolf UI (#1686)
|
||||
|
||||
### 🔄 Technical tasks
|
||||
|
||||
- bump actions/setup-java from 3 to 4 (#1690)
|
||||
- bump commons-io:commons-io from 2.14.0 to 2.15.1 (#1689)
|
||||
- bump com.diffplug.spotless:spotless-maven-plugin (#1688)
|
||||
|
||||
## Version 2023.5
|
||||
|
||||
### New functionality
|
||||
|
||||
- Implement JWT jku example (#1552)
|
||||
- Java 21 initial support (#1622)
|
||||
- improve MFAC lesson hint texts for a better user experience (#1424)
|
||||
- upgrade to Spring Boot version 3 (#1477)
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- typo in WebGoad.txt (#1667)
|
||||
- search box moved and jwt encode/decode with little delay (#1664)
|
||||
- skip validation for JWT (#1663)
|
||||
- fixed issue in JWT test tool and added robot test (#1658)
|
||||
- Password reset link test condition more strict and move all WebWolf links to /WebWolf (#1645)
|
||||
- fix servers id (#1619)
|
||||
- potential NPE in the stored XSS assignment
|
||||
- crypto basics broken links
|
||||
- fixes the default change in trailing slash matching and address the affected assignments
|
||||
- hint that was breaking the template, causing hints from different assignments to mix (#1424)
|
||||
- HijackSession lesson template deprecated Tymeleaf attribute
|
||||
- Fix NPE in IDOR lesson
|
||||
- Add new assignment IT tests
|
||||
- XSS mitigation
|
||||
- Stored Cross-Site Scripting Lesson
|
||||
- Add Assignment7 Tests
|
||||
- Fix IDOR lesson
|
||||
- remove steps from release script (#1509)
|
||||
- robotframework fails due to updated dependencies (#1508)
|
||||
- fix Java image inside Docker file The image now downloads the correct Java version based on the architecture.
|
||||
- Fix typo of HijackSession_content0.adoc
|
||||
- Restrict SSRF Regexes
|
||||
- update challenge code - Flags are now wired through a Spring config - Introduced Flag class - Removed Flags from the
|
||||
FlagController
|
||||
|
||||
## Version 2023.4
|
||||
|
||||
### New functionality
|
||||
|
||||
- [#1422 Add Docker Linux Desktop variant with all tools installed](https://github.com/WebGoat/WebGoat/issues/1422).
|
||||
Thanks to the [OWASP WrongSecrets project](https://owasp.org/www-project-wrongsecrets/) we now have a Docker Linux
|
||||
desktop image with all the tools installed. No need to install any tools locally only run the new Docker image. See
|
||||
README.md for details on how to start it.
|
||||
- [#1411 JWT: looks that buy as Tom also works with alg:none](https://github.com/WebGoat/WebGoat/issues/1411).
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- [#1410 WebWolf: JWT decode is broken](https://github.com/WebGoat/WebGoat/issues/1410).
|
||||
- [#1396 password_reset return 500 Error](https://github.com/WebGoat/WebGoat/issues/1396).
|
||||
- [#1379 Move XXE to A05:2021-Security Misconfiguration](https://github.com/WebGoat/WebGoat/issues/1379).
|
||||
|
||||
## Version 2023.3
|
||||
|
||||
With great pleasure, we present you with a new release of WebGoat **2023.3**. Finally, it has been a while. This year
|
||||
starts with a new release of WebGoat. This year we will undoubtedly release more often. From this release on, we began
|
||||
to use a new versioning scheme (https://calver.org/#scheme).
|
||||
|
||||
A big thanks to René Zubcevic and Àngel Ollé Blázquez for keeping the project alive this last year, and hopefully, we
|
||||
can make
|
||||
many more releases this year.
|
||||
|
||||
### New functionality
|
||||
|
||||
- New year's resolution(2022): major refactoring of WebGoat to simplify the setup and improve building times.
|
||||
- Move away from multi-project setup:
|
||||
* This has a huge performance benefit when building the application. Build time locally is now
|
||||
`Total time: 42.469 s` (depends on your local machine of course)
|
||||
* No longer add Maven dependencies in several places
|
||||
* H2 no longer needs to run as separate process, which solves the issue of WebWolf sharing and needing to configure
|
||||
the correct database connection.
|
||||
- More explicit paths in html files to reference `adoc` files, less magic.
|
||||
- Integrate WebWolf in WebGoat, the setup was way too complicated and needed configuration which could lead to mistakes
|
||||
and a not working application. This also simplifies the Docker configuration as there is only 1 Docker image.
|
||||
- Add WebWolf button in WebGoat
|
||||
- Move all lessons into `src/main/resources`
|
||||
- WebGoat selects a port dynamically when starting. It will still start of port 8080 it will try another port to ease
|
||||
the user experience.
|
||||
- WebGoat logs URL after startup: `Please browse to http://127.0.0.1:8080/WebGoat to get started...`
|
||||
- Simplify `Dockerfile` as we no longer need a script to start everything
|
||||
- Maven build now start WebGoat jar with Maven plugin to make sure we run against the latest build.
|
||||
- Added `Initializable` interface for a lesson, an assignment can implement this interface to set it up for a specific
|
||||
user and to reset the assignment back to its original state when a reset lesson occurs. See `BlindSendFileAssignment`
|
||||
for an example.
|
||||
- Integration tests now use the same user. This saves a lot of time as before every test used a different user which
|
||||
triggered the Flyway migration to set up the database schema for the user. This migration took a lot of time.
|
||||
- Updated introduction lesson to WebWolf.
|
||||
- Added language switch for support for multiple languages.
|
||||
- Removed logic to start WebGoat on a random port when port `8080` is taken. We would loop until we found a free port.
|
||||
We simplified this to just start on the specified port.
|
||||
- Add Google formatter for all our code, a PR now checks whether the code adheres to the standard.
|
||||
- Renaming of all packages and folders.
|
||||
- [#1039 New OWASP Top 10](https://github.com/WebGoat/WebGoat/issues/1093)
|
||||
- [#1065 New lesson about logging](https://github.com/WebGoat/WebGoat/issues/1065)
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- [#1193 Vulnerable component lesson - java.desktop does not "opens java.beans" to unnamed module](https://github.com/WebGoat/WebGoat/issues/1193)
|
||||
- [#1176 Minor: XXE lesson 12 patch not reset by 'lesson reset' while it IS reset by leaving/returning to lesson](https://github.com/WebGoat/WebGoat/issues/1176)
|
||||
- [#1134 "Exploiting XStream" assignment does not work](https://github.com/WebGoat/WebGoat/issues/1134)
|
||||
- [#1130 Typo: Using Indrect References](https://github.com/WebGoat/WebGoat/issues/1130)
|
||||
- [#1101 SQL lesson not correct](https://github.com/WebGoat/WebGoat/issues/1101)
|
||||
- [#1079 startup.sh issues of WebWolf - cannot connect to the WebGoat DB](https://github.com/WebGoat/WebGoat/issues/1079)
|
||||
- [#1379 Move XXE to A05:2021-_Security_ Misconfiguration](https://github.com/WebGoat/WebGoat/issues/1379)
|
||||
- [#1298 SocketUtils is deprecated and will be removed in Spring Security 6](https://github.com/WebGoat/WebGoat/issues/1298)
|
||||
- [#1248 Rewrite the WebWolf Introduction Lesson with the new changes](https://github.com/WebGoat/WebGoat/issues/1248)
|
||||
- [#1200 Type cast error in sample code at JWT token section](https://github.com/WebGoat/WebGoat/issues/1200)
|
||||
- [#1173 --server.port=9000 is not respected on Windows (both cmd as Powershell)](https://github.com/WebGoat/WebGoat/issues/1173)
|
||||
- [#1103 (A1) path traversel lesson 7 seems broken](https://github.com/WebGoat/WebGoat/issues/1103)
|
||||
- [#986 - User registration not persistant](https://github.com/WebGoat/WebGoat/issues/986)
|
||||
|
||||
## Version 8.2.2
|
||||
|
||||
### New functionality
|
||||
|
||||
- Docker image now supports nginx when browsing to http://localhost a landing page is shown.
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- [#1039 jwt-7-Code review](https://github.com/WebGoat/WebGoat/issues/1039)
|
||||
- [#1031 SQL Injection (intro) 5: Data Control Language (DCL) the wiki's solution is not correct](https://github.com/WebGoat/WebGoat/issues/1031)
|
||||
- [#1027 Webgoat 8.2.1 Vulnerable_Components_12 Shows internal server error](https://github.com/WebGoat/WebGoat/issues/1027)
|
||||
|
||||
## Version 8.2.1
|
||||
|
||||
### New functionality
|
||||
|
||||
- New Docker image for arm64 architecture is now available (for Apple M1)
|
||||
|
||||
## Version 8.2.0
|
||||
|
||||
### New functionality
|
||||
|
||||
- Add new zip slip lesson (part of path traversal)
|
||||
- SQL lessons are now separate for each user, database are now per user and no longer shared across users
|
||||
- Moved to Java 15 & Spring Boot 2.4 & moved to JUnit 5
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- [#974 SQL injection Intro 5 not solvable](https://github.com/WebGoat/WebGoat/issues/974)
|
||||
- [#962 SQL-Lesson 5 (Advanced) Solvable with wrong anwser](https://github.com/WebGoat/WebGoat/issues/962)
|
||||
- [#961 SQl-Injection lesson 4 not deleting created row](https://github.com/WebGoat/WebGoat/issues/961)
|
||||
- [#949 Challenge: Admin password reset always solvable](https://github.com/WebGoat/WebGoat/issues/949)
|
||||
- [#923 - Upgrade to Java 15](https://github.com/WebGoat/WebGoat/issues/923)
|
||||
- [#922 - Vulnerable components lesson](https://github.com/WebGoat/WebGoat/issues/922)
|
||||
- [#891 - Update the OWASP website with the new all-in-one Docker container](https://github.com/WebGoat/WebGoat/issues/891)
|
||||
- [#844 - Suggestion: Update navigation](https://github.com/WebGoat/WebGoat/issues/844)
|
||||
- [#843 - Bypass front-end restrictions: Field restrictions - confusing text in form](https://github.com/WebGoat/WebGoat/issues/843)
|
||||
- [#841 - XSS - Reflected XSS confusing instruction and success messages](https://github.com/WebGoat/WebGoat/issues/841)
|
||||
- [#839 - SQL Injection (mitigation) Order by clause confusing](https://github.com/WebGoat/WebGoat/issues/839)
|
||||
- [#838 - SQL mitigation (filtering) can only be passed by updating table](https://github.com/WebGoat/WebGoat/issues/838)
|
||||
|
||||
## Contributors
|
||||
|
||||
Special thanks to the following contributors providing us with a pull request:
|
||||
|
||||
- nicholas-quirk
|
||||
- VijoPlays
|
||||
- aolle
|
||||
- trollingHeifer
|
||||
- maximmasiutin
|
||||
- toshihue
|
||||
- avivmu
|
||||
- KellyMarchewa
|
||||
- NatasG
|
||||
- gabe-sky
|
||||
# WebGoat release notes
|
||||
|
||||
## Version 8.1.0
|
||||
|
||||
@ -267,30 +6,28 @@ Special thanks to the following contributors providing us with a pull request:
|
||||
|
||||
- Added new lessons for cryptography and path-traversal
|
||||
- Extra content added to the XXE lesson
|
||||
- Explanation of the assignments will be part of WebGoat, in this release we added detailed descriptions on how to solve
|
||||
the XXE lesson. In the upcoming releases new explanations will be added. If you want to contribute please create a
|
||||
pull request on Github.
|
||||
- Docker improvements + docker stack for complete container with nginx
|
||||
- Included JWT token decoding and generation, since jwt.io does not support None anymore
|
||||
- Explanation of the assignments will be part of WebGoat, in this release we added detailed descriptions on how to solve the XXE lesson. In the upcoming releases new explanations will be added. If you want to contribute please create a pull request on Github.
|
||||
- Docker improvements + docker stack for complete container with nginx
|
||||
- Included JWT token decoding and generation, since jwt.io does not support None anymore
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- [#743 - Character encoding errors](https://github.com/WebGoat/WebGoat/issues/743)
|
||||
- [#811 - Flag submission fails](https://github.com/WebGoat/WebGoat/issues/811)
|
||||
- [#811 - Flag submission fails](https://github.com/WebGoat/WebGoat/issues/811)
|
||||
- [#810 - Scoreboard for challenges shows csrf users](https://github.com/WebGoat/WebGoat/issues/810)
|
||||
- [#788 - strange copy in constructor](https://github.com/WebGoat/WebGoat/issues/788)
|
||||
- [#788 - strange copy in constructor](https://github.com/WebGoat/WebGoat/issues/788)
|
||||
- [#760 - Execution of standalone jar fails (Flyway migration step](https://github.com/WebGoat/WebGoat/issues/760)
|
||||
- [#766 - Unclear objective of vulnerable components practical assignment](https://github.com/WebGoat/WebGoat/issues/766)
|
||||
- [#708 - Seems like the home directory of WebGoat always use @project.version@](https://github.com/WebGoat/WebGoat/issues/708)
|
||||
- [#719 - WebGoat: 'Contact Us' email link in header is not correctly set](https://github.com/WebGoat/WebGoat/issues/719)
|
||||
- [#715 - Reset lesson doesn't reset the "HTML lesson" => forms stay succesful](https://github.com/WebGoat/WebGoat/issues/715)
|
||||
- [#725 - Vulnerable Components lesson 12 broken due to too new dependency](https://github.com/WebGoat/WebGoat/issues/725)
|
||||
- [#716 - On M26 @project.version@ is not "interpreted" #7](https://github.com/WebGoat/WebGoat/issues/716)
|
||||
- [#721 couldn't be able to run CSRF lesson 3: Receive Whitelabel Error Page](https://github.com/WebGoat/WebGoat/issues/721)
|
||||
- [#724 - Dead link in VulnerableComponents lesson 11](https://github.com/WebGoat/WebGoat/issues/724)
|
||||
|
||||
## Contributors
|
||||
|
||||
- [#715 - Reset lesson doesn't reset the "HTML lesson" => forms stay succesful](https://github.com/WebGoat/WebGoat/issues/715)
|
||||
- [#725 - Vulnerable Components lesson 12 broken due to too new dependency](https://github.com/WebGoat/WebGoat/issues/725)
|
||||
- [#716 - On M26 @project.version@ is not "interpreted" #7](https://github.com/WebGoat/WebGoat/issues/716)
|
||||
- [#721 couldn't be able to run CSRF lesson 3: Receive Whitelabel Error Page](https://github.com/WebGoat/WebGoat/issues/721)
|
||||
- [#724 - Dead link in VulnerableComponents lesson 11](https://github.com/WebGoat/WebGoat/issues/724)
|
||||
|
||||
## Contributors
|
||||
|
||||
Special thanks to the following contributors providing us with a pull request:
|
||||
|
||||
- Satoshi SAKAO
|
||||
@ -305,4 +42,9 @@ Special thanks to the following contributors providing us with a pull request:
|
||||
|
||||
And everyone who provided feedback through Github.
|
||||
|
||||
|
||||
Team WebGoat
|
||||
|
||||
|
||||
|
||||
|
||||
|
12
buildspec.yml
Normal file
@ -0,0 +1,12 @@
|
||||
version: 0.1
|
||||
|
||||
phases:
|
||||
build:
|
||||
commands:
|
||||
- mvn package
|
||||
|
||||
artifacts:
|
||||
files:
|
||||
- webgoat-server/target/webgoat-server-8.0-SNAPSHOT.jar
|
||||
discard-paths: yes
|
||||
|
@ -8,4 +8,4 @@
|
||||
<suppress files="ContentTypeAssignment.java" checks="IllegalImportCheck" />
|
||||
<suppress files="SimpleXXE.java" checks="IllegalImportCheck" />
|
||||
<suppress files="HtmlTamperingTask.java" checks="ParameterName" />
|
||||
</suppressions>
|
||||
</suppressions>
|
@ -1,77 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
|
||||
<suppress>
|
||||
<notes><![CDATA[
|
||||
This suppresses all CVE entries that have a score below CVSS 7.
|
||||
]]></notes>
|
||||
<cvssBelow>7</cvssBelow>
|
||||
</suppress>
|
||||
<suppress>
|
||||
<notes><![CDATA[
|
||||
file name: spring-tx-5.3.21.jar
|
||||
]]></notes>
|
||||
<sha1>13f4f564024d2f85502c151942307c3ca851a4f7</sha1>
|
||||
<cve>CVE-2016-1000027</cve>
|
||||
</suppress>
|
||||
<suppress>
|
||||
<notes><![CDATA[
|
||||
file name: spring-core-5.3.21.jar
|
||||
]]></notes>
|
||||
<packageUrl regex="true">^pkg:maven/org\.springframework/spring\-core@.*$</packageUrl>
|
||||
<cve>CVE-2016-1000027</cve>
|
||||
</suppress>
|
||||
<suppress>
|
||||
<notes><![CDATA[
|
||||
file name: spring-aop-5.3.21.jar
|
||||
]]></notes>
|
||||
<packageUrl regex="true">^pkg:maven/org\.springframework/spring\-aop@.*$</packageUrl>
|
||||
<cve>CVE-2016-1000027</cve>
|
||||
</suppress>
|
||||
<suppress>
|
||||
<notes><![CDATA[
|
||||
file name: spring-boot-starter-security-2.7.1.jar
|
||||
]]></notes>
|
||||
<packageUrl regex="true">^pkg:maven/org\.springframework\.boot/spring\-boot\-starter\-security@.*$</packageUrl>
|
||||
<cve>CVE-2022-22978</cve>
|
||||
</suppress>
|
||||
<suppress>
|
||||
<notes><![CDATA[
|
||||
file name: jruby-stdlib-9.2.20.1.jar: jopenssl.jar (shaded: rubygems:jruby-openssl:0.11.0)
|
||||
]]></notes>
|
||||
<packageUrl regex="true">^pkg:maven/rubygems/jruby\-openssl@.*$</packageUrl>
|
||||
<cpe>cpe:/a:jruby:jruby</cpe>
|
||||
<cpe>cpe:/a:openssl:openssl</cpe>
|
||||
</suppress>
|
||||
<suppress>
|
||||
<notes><![CDATA[
|
||||
file name: xstream-1.4.5.jar
|
||||
]]></notes>
|
||||
<packageUrl regex="true">^pkg:maven/com\.thoughtworks\.xstream/xstream@.*$</packageUrl>
|
||||
<cpe>cpe:/a:xstream_project:xstream</cpe>
|
||||
<vulnerabilityName>CVE-2013-7285</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2016-3674</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2017-7957</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2020-26217</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2020-26258</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2020-26259</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2021-21341</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2021-21342</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2021-21343</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2021-21344</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2021-21345</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2021-21346</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2021-21347</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2021-21348</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2021-21349</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2021-21350</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2021-21351</vulnerabilityName>
|
||||
<vulnerabilityName>CVE-2021-43859</vulnerabilityName>
|
||||
</suppress>
|
||||
<suppress>
|
||||
<notes><![CDATA[
|
||||
file name: spring-jcl-5.3.21.jar
|
||||
]]></notes>
|
||||
<packageUrl regex="true">^pkg:maven/org\.springframework/spring\-.*@.*$</packageUrl>
|
||||
<cve>CVE-2016-1000027</cve>
|
||||
</suppress>
|
||||
</suppressions>
|
@ -1,10 +0,0 @@
|
||||
** Welcome to WebGoat desktop image
|
||||
|
||||
With this image you have WebGoat and ZAP and a browser available to you in a browser running on Ubuntu.
|
||||
You can start WebGoat and ZAP by opening a terminal and type:
|
||||
|
||||
./start_webgoat.sh
|
||||
./start_zap.sh
|
||||
|
||||
Happy hacking,
|
||||
Team WebGoat
|
@ -1,17 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
/config/java-jdk/bin/java \
|
||||
-Duser.home=/config \
|
||||
-Dfile.encoding=UTF-8 \
|
||||
-DTZ=Europe/Amsterdam \
|
||||
--add-opens java.base/java.lang=ALL-UNNAMED \
|
||||
--add-opens java.base/java.util=ALL-UNNAMED \
|
||||
--add-opens java.base/java.lang.reflect=ALL-UNNAMED \
|
||||
--add-opens java.base/java.text=ALL-UNNAMED \
|
||||
--add-opens java.desktop/java.beans=ALL-UNNAMED \
|
||||
--add-opens java.desktop/java.awt.font=ALL-UNNAMED \
|
||||
--add-opens java.base/sun.nio.ch=ALL-UNNAMED \
|
||||
--add-opens java.base/java.io=ALL-UNNAMED \
|
||||
--add-opens java.base/java.util=ALL-UNNAMED \
|
||||
-Drunning.in.docker=false \
|
||||
-jar /config/webgoat.jar
|
@ -1,3 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
/config/java-jdk/bin/java -jar /config/ZAP_2.15.0/zap-2.15.0.jar
|
@ -1,4 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: Copyright © $today.year WebGoat authors
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
13
docker-compose-local.yml
Normal file
@ -0,0 +1,13 @@
|
||||
version: '2.1'
|
||||
|
||||
services:
|
||||
webgoat:
|
||||
image: webgoat/webgoat-v8.0.0.snapshot
|
||||
extends:
|
||||
file: docker-compose.yml
|
||||
service: webgoat
|
||||
webwolf:
|
||||
extends:
|
||||
file: docker-compose.yml
|
||||
service: webwolf
|
||||
image: webgoat/webwolf-v8.0.0.snapshot
|
40
docker-compose-postgres.yml
Normal file
@ -0,0 +1,40 @@
|
||||
version: '2.0'
|
||||
|
||||
services:
|
||||
webgoat:
|
||||
image: webgoat/webgoat-8.0
|
||||
user: webgoat
|
||||
environment:
|
||||
- WEBWOLF_HOST=webwolf
|
||||
- WEBWOLF_PORT=9090
|
||||
- spring.datasource.url=jdbc:postgresql://webgoat_db:5432/webgoat?user=webgoat&password=webgoat
|
||||
- spring.datasource.username=webgoat
|
||||
- spring.datasource.password=webgoat
|
||||
- spring.datasource.driver-class-name=org.postgresql.Driver
|
||||
- spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
|
||||
- webgoat.server.directory=/home/webgoat/.webgoat/
|
||||
- webgoat.user.directory=/home/webgoat/.webgoat/
|
||||
ports:
|
||||
- "8080:8080"
|
||||
webwolf:
|
||||
image: webgoat/webwolf
|
||||
environment:
|
||||
- spring.datasource.url=jdbc:postgresql://webgoat_db:5432/webgoat?user=webgoat&password=webgoat
|
||||
- spring.datasource.username=webgoat
|
||||
- spring.datasource.password=webgoat
|
||||
- spring.datasource.driver-class-name=org.postgresql.Driver
|
||||
- spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
|
||||
ports:
|
||||
- "9090:9090"
|
||||
webgoat_db:
|
||||
image: postgres:10.12
|
||||
# Uncomment to store the state of the database on the host.
|
||||
# volumes:
|
||||
# - ./database:/var/lib/postgresql
|
||||
environment:
|
||||
- POSTGRES_PASSWORD=webgoat
|
||||
- POSTGRES_USER=webgoat
|
||||
- POSTGRES_DB=webgoat
|
||||
ports:
|
||||
- "5432:5432"
|
||||
|
22
docker-compose.yml
Normal file
@ -0,0 +1,22 @@
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
webgoat:
|
||||
image: webgoat/webgoat-8.0
|
||||
environment:
|
||||
- WEBWOLF_HOST=webwolf
|
||||
- WEBWOLF_PORT=9090
|
||||
- TZ=Europe/Amsterdam
|
||||
ports:
|
||||
- "8080:8080"
|
||||
- "9001:9001"
|
||||
volumes:
|
||||
- .:/home/webgoat/.webgoat
|
||||
working_dir: /home/webgoat
|
||||
webwolf:
|
||||
image: webgoat/webwolf
|
||||
ports:
|
||||
- "9090:9090"
|
||||
command: --spring.datasource.url=jdbc:hsqldb:hsql://webgoat:9001/webgoat --server.address=0.0.0.0
|
||||
depends_on:
|
||||
- webgoat
|
1
docker/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
*.jar
|
32
docker/Dockerfile
Normal file
@ -0,0 +1,32 @@
|
||||
FROM openjdk:11.0.1-jre-slim-stretch
|
||||
|
||||
ARG webgoat_version=v8.2.0-SNAPSHOT
|
||||
ENV webgoat_version_env=${webgoat_version}
|
||||
|
||||
RUN apt-get update && apt-get install
|
||||
RUN useradd --home-dir /home/webgoat --create-home -U webgoat
|
||||
RUN cd /home/webgoat/;
|
||||
RUN chgrp -R 0 /home/webgoat
|
||||
RUN chmod -R g=u /home/webgoat
|
||||
RUN apt-get -y install apt-utils nginx
|
||||
|
||||
USER webgoat
|
||||
|
||||
COPY nginx.conf /etc/nginx/nginx.conf
|
||||
COPY index.html /usr/share/nginx/html/
|
||||
COPY webgoat-server-${webgoat_version}.jar /home/webgoat/webgoat.jar
|
||||
COPY webwolf-${webgoat_version}.jar /home/webgoat/webwolf.jar
|
||||
COPY start.sh /home/webgoat
|
||||
|
||||
EXPOSE 8080
|
||||
EXPOSE 9090
|
||||
|
||||
ENV WEBGOAT_PORT 8080
|
||||
ENV WEBGOAT_SSLENABLED false
|
||||
|
||||
ENV GOATURL https://127.0.0.1:$WEBGOAT_PORT
|
||||
ENV WOLFURL http://127.0.0.1:9090
|
||||
|
||||
|
||||
WORKDIR /home/webgoat
|
||||
ENTRYPOINT /bin/bash /home/webgoat/start.sh $webgoat_version_env
|
9
docker/Readme.md
Normal file
@ -0,0 +1,9 @@
|
||||
# Docker all-in-one image
|
||||
|
||||
## Docker build
|
||||
|
||||
docker build --no-cache --build-arg webgoat_version=v8.2.0-SNAPSHOT -t webgoat/goatandwolf:latest .
|
||||
|
||||
## Docker run
|
||||
|
||||
docker run -d -p 80:8888 -p 8080:8080 -p 9090:9090 -e TZ=Europe/Amsterdam webgoat/goatandwolf:latest
|
43
docker/index.html
Normal file
@ -0,0 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
<h1>OWASP WebGoat Training tools</h1>
|
||||
<p>
|
||||
Use the following links to access the WebGoat and WebWolf applications.
|
||||
Register a user using WebGoat. The same user can access WebWolf.
|
||||
</p>
|
||||
|
||||
<h2>Use without special host name entries</h2>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>WebGoat URL</td>
|
||||
<td><a href="http://127.0.0.1:8080/WebGoat" target="_blank">http://127.0.0.1:8080/WebGoat</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>WebWolf URL</td>
|
||||
<td><a href="http://127.0.0.1:9090/WebWolf" target="_blank">http://127.0.0.1:9090/WebWolf</a></td>
|
||||
</tr>
|
||||
<table>
|
||||
|
||||
<h2>Use with www.webgoat.local and www.webwolf.local</h2>
|
||||
<p>
|
||||
Add the following entries to your local <b><i>hosts</i></b> file on Windows (c:\Windows\System32\drivers\etc\hosts) or Linux (/etc/hosts)
|
||||
|
||||
<pre>
|
||||
127.0.0.1 www.webgoat.local www.webwolf.local
|
||||
</pre>
|
||||
Then use the following URL's:
|
||||
</p>
|
||||
<table>
|
||||
<tr>
|
||||
<td>WebGoat URL</td>
|
||||
<td><a href="http://www.webgoat.local/WebGoat" target="_blank">http://www.webgoat.local/WebGoat</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>WebWolf URL</td>
|
||||
<td><a href="http://www.webwolf.local/WebWolf" target="_blank">http://www.webwolf.local/WebWolf</a></td>
|
||||
</tr>
|
||||
<table>
|
||||
</body>
|
||||
</html>
|
140
docker/nginx.conf
Normal file
@ -0,0 +1,140 @@
|
||||
error_log /tmp/error.log;
|
||||
pid /tmp/nginx.pid;
|
||||
|
||||
worker_processes 1;
|
||||
|
||||
events { worker_connections 1024; }
|
||||
|
||||
http {
|
||||
|
||||
client_body_temp_path /tmp/client_body;
|
||||
fastcgi_temp_path /tmp/fastcgi_temp;
|
||||
proxy_temp_path /tmp/proxy_temp;
|
||||
scgi_temp_path /tmp/scgi_temp;
|
||||
uwsgi_temp_path /tmp/uwsgi_temp;
|
||||
|
||||
sendfile on;
|
||||
|
||||
upstream docker-webgoat {
|
||||
server 127.0.0.1:8080;
|
||||
}
|
||||
|
||||
upstream docker-webwolf {
|
||||
server 127.0.0.1:9090;
|
||||
}
|
||||
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Host $server_name;
|
||||
|
||||
server {
|
||||
listen 8888;
|
||||
server_name www.webgoat.local;
|
||||
|
||||
root /var/www;
|
||||
|
||||
access_log /tmp/goataccess.log;
|
||||
error_log /tmp/goaterror.log;
|
||||
|
||||
location ~* \.(png|jpg|jpeg|gif|ico|woff|otf|ttf|mvc|svg|txt|pdf|docx?|xlsx?)$ {
|
||||
access_log off;
|
||||
proxy_pass http://docker-webgoat;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location / {
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
add_header Cache-Control no-cache;
|
||||
expires 0;
|
||||
}
|
||||
|
||||
location /WebGoat {
|
||||
proxy_pass http://docker-webgoat;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
server {
|
||||
listen 8888;
|
||||
server_name www.webwolf.local;
|
||||
|
||||
root /var/www;
|
||||
|
||||
access_log /tmp/wolfaccess.log;
|
||||
error_log /tmp/wolferror.log;
|
||||
|
||||
location /WebGoat/PasswordReset/ForgotPassword/create-password-reset-link {
|
||||
proxy_pass http://docker-webgoat;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /PasswordReset/reset/reset-password {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /files {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /tmpdir {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /webjars {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /css {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /login {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /images {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /mail {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /upload {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /js {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /landing {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /logout {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
location /WebWolf {
|
||||
proxy_pass http://docker-webwolf;
|
||||
proxy_redirect off;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
40
docker/pom.xml
Normal file
@ -0,0 +1,40 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>webgoat-all-in-one-docker</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<parent>
|
||||
<groupId>org.owasp.webgoat</groupId>
|
||||
<artifactId>webgoat-parent</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<version>1.8</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>install</phase>
|
||||
<configuration>
|
||||
<target>
|
||||
<copy file="../webgoat-server/target/webgoat-server-${project.version}.jar" tofile="webgoat-server-${project.version}.jar"/>
|
||||
<copy file="../webwolf/target/webwolf-${project.version}.jar" tofile="webwolf-${project.version}.jar"/>
|
||||
</target>
|
||||
</configuration>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
12
docker/start.sh
Normal file
@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd /home/webgoat
|
||||
service nginx start
|
||||
sleep 1
|
||||
java -Duser.home=/home/webgoat -Dfile.encoding=UTF-8 -jar webgoat.jar --webgoat.build.version=$1 --server.address=0.0.0.0 > webgoat.log &
|
||||
|
||||
sleep 10
|
||||
|
||||
java -Duser.home=/home/webgoat -Dfile.encoding=UTF-8 -jar webwolf.jar --webgoat.build.version=$1 --server.address=0.0.0.0 > webwolf.log &
|
||||
|
||||
tail -300f webgoat.log
|
21
docs/LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013-2019 Blackrock Digital LLC
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
@ -1,3 +1,20 @@
|
||||
# WebGoat landing page
|
||||
|
||||
Old GitHub page which now redirects to OWASP website.
|
||||
This serves the Github pages for the landing page of WebGoat.
|
||||
|
||||
# Running locally
|
||||
|
||||
```
|
||||
docker run -t --rm -v "$PWD":/usr/src/app -p "4000:4000" starefossen/github-pages
|
||||
```
|
||||
|
||||
And then browse to http://localhost:4000/docs
|
||||
|
||||
# Thanks to
|
||||
|
||||
[Freelancer](http://startbootstrap.com/template-overviews/freelancer/) is a one page freelancer portfolio theme for [Bootstrap](http://getbootstrap.com/) created by [Start Bootstrap](http://startbootstrap.com/). This theme features several content sections, a responsive portfolio grid with hover effects, full page portfolio item modals, and a working PHP contact form.
|
||||
|
||||
## Copyright and License
|
||||
|
||||
Copyright 2013-2018 Blackrock Digital LLC. Code released under the [MIT](https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/gh-pages/LICENSE) license.
|
||||
|
||||
|
380
docs/css/freelancer.css
Normal file
@ -0,0 +1,380 @@
|
||||
body {
|
||||
font-family: 'Lato';
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-weight: 700;
|
||||
font-family: 'Montserrat';
|
||||
}
|
||||
|
||||
hr.star-light,
|
||||
hr.star-dark {
|
||||
max-width: 15rem;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
border: none;
|
||||
border-top: solid 0.25rem;
|
||||
margin-top: 2.5rem;
|
||||
margin-bottom: 2.5rem;
|
||||
}
|
||||
|
||||
hr.star-light:after,
|
||||
hr.star-dark:after {
|
||||
position: relative;
|
||||
top: -.8em;
|
||||
display: inline-block;
|
||||
padding: 0 0.25em;
|
||||
content: '\f005';
|
||||
font-family: FontAwesome;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
hr.star-light {
|
||||
border-color: #fff;
|
||||
}
|
||||
|
||||
hr.star-light:after {
|
||||
color: #fff;
|
||||
background-color: #18BC9C;
|
||||
}
|
||||
|
||||
hr.star-dark {
|
||||
border-color: #2C3E50;
|
||||
}
|
||||
|
||||
hr.star-dark:after {
|
||||
color: #2C3E50;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
section {
|
||||
padding: 6rem 0;
|
||||
}
|
||||
|
||||
section h2 {
|
||||
font-size: 2.25rem;
|
||||
line-height: 2rem;
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
section h2 {
|
||||
font-size: 3rem;
|
||||
line-height: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-xl {
|
||||
padding: 1rem 1.75rem;
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
.btn-social {
|
||||
width: 3.25rem;
|
||||
height: 3.25rem;
|
||||
font-size: 1.25rem;
|
||||
line-height: 2rem;
|
||||
}
|
||||
|
||||
.scroll-to-top {
|
||||
z-index: 1042;
|
||||
right: 1rem;
|
||||
bottom: 1rem;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.scroll-to-top a {
|
||||
width: 3.5rem;
|
||||
height: 3.5rem;
|
||||
background-color: rgba(33, 37, 41, 0.5);
|
||||
line-height: 3.1rem;
|
||||
}
|
||||
|
||||
#mainNav {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 1rem;
|
||||
font-weight: 700;
|
||||
font-family: 'Montserrat';
|
||||
}
|
||||
|
||||
#mainNav .navbar-brand {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#mainNav .navbar-nav {
|
||||
margin-top: 1rem;
|
||||
letter-spacing: 0.0625rem;
|
||||
}
|
||||
|
||||
#mainNav .navbar-nav li.nav-item a.nav-link {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#mainNav .navbar-nav li.nav-item a.nav-link:hover {
|
||||
color: #18BC9C;
|
||||
}
|
||||
|
||||
#mainNav .navbar-nav li.nav-item a.nav-link:active, #mainNav .navbar-nav li.nav-item a.nav-link:focus {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#mainNav .navbar-nav li.nav-item a.nav-link.active {
|
||||
color: #18BC9C;
|
||||
}
|
||||
|
||||
#mainNav .navbar-toggler {
|
||||
font-size: 80%;
|
||||
padding: 0.8rem;
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
#mainNav {
|
||||
padding-top: 1.5rem;
|
||||
padding-bottom: 1.5rem;
|
||||
-webkit-transition: padding-top 0.3s, padding-bottom 0.3s;
|
||||
-moz-transition: padding-top 0.3s, padding-bottom 0.3s;
|
||||
transition: padding-top 0.3s, padding-bottom 0.3s;
|
||||
}
|
||||
#mainNav .navbar-brand {
|
||||
font-size: 2em;
|
||||
-webkit-transition: font-size 0.3s;
|
||||
-moz-transition: font-size 0.3s;
|
||||
transition: font-size 0.3s;
|
||||
}
|
||||
#mainNav .navbar-nav {
|
||||
margin-top: 0;
|
||||
}
|
||||
#mainNav .navbar-nav > li.nav-item > a.nav-link.active {
|
||||
color: #fff;
|
||||
background: #18BC9C;
|
||||
}
|
||||
#mainNav .navbar-nav > li.nav-item > a.nav-link.active:active, #mainNav .navbar-nav > li.nav-item > a.nav-link.active:focus, #mainNav .navbar-nav > li.nav-item > a.nav-link.active:hover {
|
||||
color: #fff;
|
||||
background: #18BC9C;
|
||||
}
|
||||
#mainNav.navbar-shrink {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
}
|
||||
#mainNav.navbar-shrink .navbar-brand {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
}
|
||||
|
||||
header.masthead {
|
||||
padding-top: calc(6rem + 72px);
|
||||
padding-bottom: 6rem;
|
||||
}
|
||||
|
||||
header.masthead h1 {
|
||||
font-size: 3rem;
|
||||
line-height: 3rem;
|
||||
}
|
||||
|
||||
header.masthead h2 {
|
||||
font-size: 1.3rem;
|
||||
font-family: 'Lato';
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
header.masthead {
|
||||
padding-top: calc(6rem + 106px);
|
||||
padding-bottom: 6rem;
|
||||
}
|
||||
header.masthead h1 {
|
||||
font-size: 4.75em;
|
||||
line-height: 4rem;
|
||||
}
|
||||
header.masthead h2 {
|
||||
font-size: 1.75em;
|
||||
}
|
||||
}
|
||||
|
||||
.portfolio {
|
||||
margin-bottom: -15px;
|
||||
}
|
||||
|
||||
.portfolio .portfolio-item {
|
||||
position: relative;
|
||||
display: block;
|
||||
max-width: 25rem;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.portfolio .portfolio-item .portfolio-item-caption {
|
||||
-webkit-transition: all ease 0.5s;
|
||||
-moz-transition: all ease 0.5s;
|
||||
transition: all ease 0.5s;
|
||||
opacity: 0;
|
||||
background-color: rgba(24, 188, 156, 0.9);
|
||||
}
|
||||
|
||||
.portfolio .portfolio-item .portfolio-item-caption:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.portfolio .portfolio-item .portfolio-item-caption .portfolio-item-caption-content {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
@media (min-width: 576px) {
|
||||
.portfolio {
|
||||
margin-bottom: -30px;
|
||||
}
|
||||
.portfolio .portfolio-item {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.portfolio-modal .portfolio-modal-dialog {
|
||||
padding: 3rem 1rem;
|
||||
min-height: calc(100vh - 2rem);
|
||||
margin: 1rem calc(1rem - 8px);
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
-moz-box-shadow: 0 0 3rem 1rem rgba(0, 0, 0, 0.5);
|
||||
-webkit-box-shadow: 0 0 3rem 1rem rgba(0, 0, 0, 0.5);
|
||||
box-shadow: 0 0 3rem 1rem rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.portfolio-modal .portfolio-modal-dialog .close-button {
|
||||
position: absolute;
|
||||
top: 2rem;
|
||||
right: 2rem;
|
||||
}
|
||||
|
||||
.portfolio-modal .portfolio-modal-dialog .close-button i {
|
||||
line-height: 38px;
|
||||
}
|
||||
|
||||
.portfolio-modal .portfolio-modal-dialog h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.portfolio-modal .portfolio-modal-dialog {
|
||||
min-height: 100vh;
|
||||
padding: 5rem;
|
||||
margin: 3rem calc(3rem - 8px);
|
||||
}
|
||||
.portfolio-modal .portfolio-modal-dialog h2 {
|
||||
font-size: 3rem;
|
||||
}
|
||||
}
|
||||
|
||||
.floating-label-form-group {
|
||||
position: relative;
|
||||
border-bottom: 1px solid #e9ecef;
|
||||
}
|
||||
|
||||
.floating-label-form-group input,
|
||||
.floating-label-form-group textarea {
|
||||
font-size: 1.5em;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
padding-right: 0;
|
||||
padding-left: 0;
|
||||
resize: none;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
background: none;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.floating-label-form-group label {
|
||||
font-size: 0.85em;
|
||||
line-height: 1.764705882em;
|
||||
position: relative;
|
||||
z-index: 0;
|
||||
top: 2em;
|
||||
display: block;
|
||||
margin: 0;
|
||||
-webkit-transition: top 0.3s ease, opacity 0.3s ease;
|
||||
-moz-transition: top 0.3s ease, opacity 0.3s ease;
|
||||
-ms-transition: top 0.3s ease, opacity 0.3s ease;
|
||||
transition: top 0.3s ease, opacity 0.3s ease;
|
||||
vertical-align: middle;
|
||||
vertical-align: baseline;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.floating-label-form-group:not(:first-child) {
|
||||
padding-left: 14px;
|
||||
border-left: 1px solid #e9ecef;
|
||||
}
|
||||
|
||||
.floating-label-form-group-with-value label {
|
||||
top: 0;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.floating-label-form-group-with-focus label {
|
||||
color: #18BC9C;
|
||||
}
|
||||
|
||||
form .row:first-child .floating-label-form-group {
|
||||
border-top: 1px solid #e9ecef;
|
||||
}
|
||||
|
||||
.footer {
|
||||
padding-top: 5rem;
|
||||
padding-bottom: 5rem;
|
||||
background-color: #2C3E50;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.copyright {
|
||||
background-color: #1a252f;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #18BC9C;
|
||||
}
|
||||
|
||||
a:focus, a:hover, a:active {
|
||||
color: #128f76;
|
||||
}
|
||||
|
||||
.btn {
|
||||
border-width: 2px;
|
||||
}
|
||||
|
||||
.bg-primary {
|
||||
background-color: #18BC9C !important;
|
||||
}
|
||||
|
||||
.bg-secondary {
|
||||
background-color: #2C3E50 !important;
|
||||
}
|
||||
|
||||
.text-primary {
|
||||
color: #18BC9C !important;
|
||||
}
|
||||
|
||||
.text-secondary {
|
||||
color: #2C3E50 !important;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: #18BC9C;
|
||||
border-color: #18BC9C;
|
||||
}
|
||||
|
||||
.btn-primary:hover, .btn-primary:focus, .btn-primary:active {
|
||||
background-color: #128f76;
|
||||
border-color: #128f76;
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
background-color: #2C3E50;
|
||||
border-color: #2C3E50;
|
||||
}
|
||||
|
||||
.btn-secondary:hover, .btn-secondary:focus, .btn-secondary:active {
|
||||
background-color: #1a252f;
|
||||
border-color: #1a252f;
|
||||
}
|
1
docs/css/freelancer.min.css
vendored
Normal file
137
docs/gulpfile.js
Normal file
@ -0,0 +1,137 @@
|
||||
// Load plugins
|
||||
const autoprefixer = require("gulp-autoprefixer");
|
||||
const browsersync = require("browser-sync").create();
|
||||
const cleanCSS = require("gulp-clean-css");
|
||||
const gulp = require("gulp");
|
||||
const header = require("gulp-header");
|
||||
const plumber = require("gulp-plumber");
|
||||
const rename = require("gulp-rename");
|
||||
const sass = require("gulp-sass");
|
||||
const uglify = require("gulp-uglify");
|
||||
const pkg = require('./package.json');
|
||||
|
||||
// Set the banner content
|
||||
const banner = ['/*!\n',
|
||||
' * Start Bootstrap - <%= pkg.title %> v<%= pkg.version %> (<%= pkg.homepage %>)\n',
|
||||
' * Copyright 2013-' + (new Date()).getFullYear(), ' <%= pkg.author %>\n',
|
||||
' * Licensed under <%= pkg.license %> (https://github.com/BlackrockDigital/<%= pkg.name %>/blob/master/LICENSE)\n',
|
||||
' */\n',
|
||||
'\n'
|
||||
].join('');
|
||||
|
||||
// Copy third party libraries from /node_modules into /vendor
|
||||
gulp.task('vendor', function(cb) {
|
||||
|
||||
// Bootstrap
|
||||
gulp.src([
|
||||
'./node_modules/bootstrap/dist/**/*',
|
||||
'!./node_modules/bootstrap/dist/css/bootstrap-grid*',
|
||||
'!./node_modules/bootstrap/dist/css/bootstrap-reboot*'
|
||||
])
|
||||
.pipe(gulp.dest('./vendor/bootstrap'))
|
||||
|
||||
// Font Awesome
|
||||
gulp.src([
|
||||
'./node_modules/@fortawesome/**/*',
|
||||
])
|
||||
.pipe(gulp.dest('./vendor'))
|
||||
|
||||
// jQuery
|
||||
gulp.src([
|
||||
'./node_modules/jquery/dist/*',
|
||||
'!./node_modules/jquery/dist/core.js'
|
||||
])
|
||||
.pipe(gulp.dest('./vendor/jquery'))
|
||||
|
||||
// jQuery Easing
|
||||
gulp.src([
|
||||
'./node_modules/jquery.easing/*.js'
|
||||
])
|
||||
.pipe(gulp.dest('./vendor/jquery-easing'))
|
||||
|
||||
// Magnific Popup
|
||||
gulp.src([
|
||||
'./node_modules/magnific-popup/dist/*'
|
||||
])
|
||||
.pipe(gulp.dest('./vendor/magnific-popup'))
|
||||
|
||||
cb();
|
||||
|
||||
});
|
||||
|
||||
// CSS task
|
||||
function css() {
|
||||
return gulp
|
||||
.src("./scss/*.scss")
|
||||
.pipe(plumber())
|
||||
.pipe(sass({
|
||||
outputStyle: "expanded"
|
||||
}))
|
||||
.on("error", sass.logError)
|
||||
.pipe(autoprefixer({
|
||||
browsers: ['last 2 versions'],
|
||||
cascade: false
|
||||
}))
|
||||
.pipe(header(banner, {
|
||||
pkg: pkg
|
||||
}))
|
||||
.pipe(gulp.dest("./css"))
|
||||
.pipe(rename({
|
||||
suffix: ".min"
|
||||
}))
|
||||
.pipe(cleanCSS())
|
||||
.pipe(gulp.dest("./css"))
|
||||
.pipe(browsersync.stream());
|
||||
}
|
||||
|
||||
// JS task
|
||||
function js() {
|
||||
return gulp
|
||||
.src([
|
||||
'./js/*.js',
|
||||
'!./js/*.min.js',
|
||||
'!./js/contact_me.js',
|
||||
'!./js/jqBootstrapValidation.js'
|
||||
])
|
||||
.pipe(uglify())
|
||||
.pipe(header(banner, {
|
||||
pkg: pkg
|
||||
}))
|
||||
.pipe(rename({
|
||||
suffix: '.min'
|
||||
}))
|
||||
.pipe(gulp.dest('./js'))
|
||||
.pipe(browsersync.stream());
|
||||
}
|
||||
|
||||
// Tasks
|
||||
gulp.task("css", css);
|
||||
gulp.task("js", js);
|
||||
|
||||
// BrowserSync
|
||||
function browserSync(done) {
|
||||
browsersync.init({
|
||||
server: {
|
||||
baseDir: "./"
|
||||
}
|
||||
});
|
||||
done();
|
||||
}
|
||||
|
||||
// BrowserSync Reload
|
||||
function browserSyncReload(done) {
|
||||
browsersync.reload();
|
||||
done();
|
||||
}
|
||||
|
||||
// Watch files
|
||||
function watchFiles() {
|
||||
gulp.watch("./scss/**/*", css);
|
||||
gulp.watch(["./js/**/*.js", "!./js/*.min.js"], js);
|
||||
gulp.watch("./**/*.html", browserSyncReload);
|
||||
}
|
||||
|
||||
gulp.task("default", gulp.parallel('vendor', css, js));
|
||||
|
||||
// dev task
|
||||
gulp.task("dev", gulp.parallel(watchFiles, browserSync));
|
Before Width: | Height: | Size: 319 KiB |
BIN
docs/img/GotGoat.jpg
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
docs/img/portfolio/assignment-example.png
Normal file
After Width: | Height: | Size: 978 KiB |
BIN
docs/img/portfolio/assignment.png
Normal file
After Width: | Height: | Size: 8.4 KiB |
BIN
docs/img/portfolio/lesson.png
Normal file
After Width: | Height: | Size: 483 KiB |
BIN
docs/img/portfolio/mitigation-example.png
Normal file
After Width: | Height: | Size: 418 KiB |
BIN
docs/img/portfolio/mitigation.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
docs/img/portfolio/teach.png
Normal file
After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
290
docs/index.html
@ -3,12 +3,296 @@
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0;url=https://webgoat.org" />
|
||||
<link rel="canonical" href="https://webgoat.org" />
|
||||
<meta http-equiv="refresh" content="0;url=https://owasp.org/www-project-webgoat/" />
|
||||
<link rel="canonical" href="https://owasp.org/www-project-webgoat/" />
|
||||
</head>
|
||||
<body>
|
||||
<h1>
|
||||
The page been moved to <a href="https://webgoat.org">https://webgoat.org</a>
|
||||
The page been moved to <a href="https://owasp.org/www-project-webgoat/">https://owasp.org/www-project-webgoat/</a>
|
||||
</h1>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<!--<head>-->
|
||||
|
||||
<!-- <meta charset="utf-8">-->
|
||||
<!-- <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">-->
|
||||
<!-- <meta name="description" content="WebGoat is a deliberately insecure application that allows interested developers just like you to test vulnerabilities-->
|
||||
<!-- commonly found in Java-based applications that use common and popular open source components">-->
|
||||
<!-- <meta name="author" content="WebGoat">-->
|
||||
|
||||
<!-- <title>WebGoat</title>-->
|
||||
|
||||
<!-- <!– Bootstrap core CSS –>-->
|
||||
<!-- <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">-->
|
||||
|
||||
<!-- <!– Custom fonts for this template –>-->
|
||||
<!-- <link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">-->
|
||||
<!-- <link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">-->
|
||||
<!-- <link href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic" rel="stylesheet" type="text/css">-->
|
||||
|
||||
<!-- <!– Plugin CSS –>-->
|
||||
<!-- <link href="vendor/magnific-popup/magnific-popup.css" rel="stylesheet" type="text/css">-->
|
||||
|
||||
<!-- <!– Custom styles for this template –>-->
|
||||
<!-- <link href="css/freelancer.min.css" rel="stylesheet">-->
|
||||
|
||||
<!--</head>-->
|
||||
|
||||
<!--<body id="page-top">-->
|
||||
|
||||
<!-- <!– Navigation –>-->
|
||||
<!-- <nav class="navbar navbar-expand-lg bg-secondary fixed-top text-uppercase" id="mainNav">-->
|
||||
<!-- <div class="container">-->
|
||||
<!-- <!– Brand and toggle get grouped for better mobile display –>-->
|
||||
<!-- <div class="navbar-header page-scroll">-->
|
||||
<!-- <img class="img-responsive" src="img/profile.png" alt="">-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </nav>-->
|
||||
|
||||
<!-- <!– Header –>-->
|
||||
<!-- <header class="masthead bg-primary text-white text-center">-->
|
||||
<!-- <div class="container">-->
|
||||
<!-- <div class="row">-->
|
||||
<!-- <div class="col-lg-12">-->
|
||||
<!-- <h2 class="text-center text-uppercase mb-5">Learn the hack - Stop the attack</h2>-->
|
||||
<!-- -->
|
||||
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="row">-->
|
||||
<!-- <div class="col-lg-8 mx-auto">-->
|
||||
<!-- <p>WebGoat is a deliberately insecure application that allows interested developers just like you to test vulnerabilities-->
|
||||
<!-- commonly found in Java-based applications that use common and popular open source components.</p>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="col-lg-8 mx-auto">-->
|
||||
<!-- <a href="https://github.com/WebGoat/WebGoat/releases" class="btn btn-xl btn-outline-light">-->
|
||||
<!-- <i class="fa fa-download"></i> Download standalone-->
|
||||
<!-- </a>-->
|
||||
<!-- <a href="https://hub.docker.com/r/webgoat/webgoat-8.0/" class="btn btn-xl btn-outline-light">-->
|
||||
<!-- <i class="fa fa-download"></i> Run using Docker-->
|
||||
<!-- </a>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </header>-->
|
||||
|
||||
<!-- <!– Portfolio Grid Section –>-->
|
||||
<!-- <section class="portfolio" id="portfolio">-->
|
||||
<!-- <div class="container">-->
|
||||
<!-- <h3 class="text-center text-uppercase text-secondary mb-0">Learn in 3 steps</h3>-->
|
||||
<!-- <hr class="star-dark mb-5">-->
|
||||
<!-- <div class="row">-->
|
||||
<!-- <div class="col-md-6 col-lg-4 text-center">-->
|
||||
<!-- <a class="portfolio-item d-block mx-auto" href="#portfolio-modal-1">-->
|
||||
<!-- <div class="portfolio-item-caption d-flex position-absolute h-100 w-100">-->
|
||||
<!-- <div class="portfolio-item-caption-content my-auto w-100 text-center text-white">-->
|
||||
<!-- <i class="fa fa-search-plus fa-3x"></i>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- <img class="img-fluid" src="img/portfolio/teach.png" alt="">-->
|
||||
<!-- </a>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="col-md-6 col-lg-4 text-center">-->
|
||||
<!-- <a class="portfolio-item d-block mx-auto" href="#portfolio-modal-2">-->
|
||||
<!-- <div class="portfolio-item-caption d-flex position-absolute h-100 w-100">-->
|
||||
<!-- <div class="portfolio-item-caption-content my-auto w-100 text-center text-white">-->
|
||||
<!-- <i class="fa fa-search-plus fa-3x"></i>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- <img class="img-fluid" src="img/portfolio/assignment.png" alt="">-->
|
||||
<!-- </a>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="col-md-6 col-lg-4 text-center" >-->
|
||||
<!-- <a class="portfolio-item d-block mx-auto" href="#portfolio-modal-3">-->
|
||||
<!-- <div class="portfolio-item-caption d-flex position-absolute h-100 w-100">-->
|
||||
<!-- <div class="portfolio-item-caption-content my-auto w-100 text-center text-white">-->
|
||||
<!-- <i class="fa fa-search-plus fa-3x"></i>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- <img class="img-fluid" src="img/portfolio/mitigation.png" alt="">-->
|
||||
<!-- </a>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </section>-->
|
||||
|
||||
<!-- <!– Goals Section –>-->
|
||||
<!-- <section class="bg-primary text-white mb-0" id="goals">-->
|
||||
<!-- <div class="container">-->
|
||||
<!-- <h3 class="text-center text-uppercase text-white">Goals</h3>-->
|
||||
<!-- <hr class="star-light mb-5">-->
|
||||
<!-- <div class="row">-->
|
||||
<!-- <div class="col-lg-6 ml-auto">-->
|
||||
<!-- <p class="lead">-->
|
||||
<!-- Web application security is difficult to learn and practice. Not many people have full blown web applications like online book -->
|
||||
<!-- stores or online banks that can be used to scan for vulnerabilities. In addition, security professionals frequently need to test -->
|
||||
<!-- tools against a platform known to be vulnerable to ensure that they perform as advertised. All of this needs to happen in a safe -->
|
||||
<!-- and legal environment.-->
|
||||
<!-- -->
|
||||
<!-- </p>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="col-lg-6 mr-auto">-->
|
||||
<!-- <p class="lead">Even if your intentions are good, we believe you should never attempt to find vulnerabilities without-->
|
||||
<!-- permission. The primary goal of the WebGoat project is simple: create a de-facto interactive teaching environment for web application security. -->
|
||||
<!-- In the future, the project team hopes to extend WebGoat into becoming a security benchmarking platform and a Java-based Web site Honeypot.-->
|
||||
<!-- </p>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </section>-->
|
||||
|
||||
<!-- <!– Contributing Section –>-->
|
||||
<!-- <section class="portfolio" id="portfolio">-->
|
||||
<!-- <div class="container">-->
|
||||
<!-- <h3 class="text-center text-uppercase text-secondary mb-0">More information</h3>-->
|
||||
<!-- <hr class="star-dark mb-5">-->
|
||||
<!-- <div class="row">-->
|
||||
<!-- <div class="col-lg-4 ml-auto">-->
|
||||
<!-- <p class="lead">For more information about running WebGoat / FAQ see our <a href="https://github.com/WebGoat/WebGoat/wiki">wiki pages.</a>-->
|
||||
<!-- </p>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="col-lg-4 mr-auto">-->
|
||||
<!-- <p class="lead">Interested in contributing to WebGoat, take a look at our <a href="https://github.com/WebGoat/WebGoat/issues">issues.</a> </p>-->
|
||||
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </section>-->
|
||||
<!-- -->
|
||||
|
||||
<!-- <!– Footer –>-->
|
||||
<!-- <footer class="footer text-center">-->
|
||||
<!-- <div class="container">-->
|
||||
<!-- <div class="row">-->
|
||||
<!-- <div class="col-md-4 mb-5 mb-lg-0">-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="col-md-4 mb-5 mb-lg-0">-->
|
||||
<!-- <h4 class="text-uppercase mb-4">Around the Web</h4>-->
|
||||
<!-- <ul class="list-inline mb-0">-->
|
||||
<!-- <li class="list-inline-item">-->
|
||||
<!-- <a class="btn btn-outline-light btn-social text-center rounded-circle" href="mailto:webgoat@owasp.org">-->
|
||||
<!-- <i class="fa fa-fw fa-at"></i>-->
|
||||
<!-- </a>-->
|
||||
<!-- </li>-->
|
||||
<!-- <li class="list-inline-item">-->
|
||||
<!-- <a class="btn btn-outline-light btn-social text-center rounded-circle" href="https://github.com/WebGoat">-->
|
||||
<!-- <i class="fa fa-fw fa-github"></i>-->
|
||||
<!-- </a>-->
|
||||
<!-- </li>-->
|
||||
<!-- <li class="list-inline-item">-->
|
||||
<!-- <a class="btn btn-outline-light btn-social text-center rounded-circle" href="https://stackoverflow.com/search?q=webgoat">-->
|
||||
<!-- <i class="fa fa-fw fa-stack-overflow"></i>-->
|
||||
<!-- </a>-->
|
||||
<!-- </li>-->
|
||||
<!-- <li class="list-inline-item">-->
|
||||
<!-- <a class="btn btn-outline-light btn-social text-center rounded-circle" href="https://twitter.com/OWASP_WebGoat">-->
|
||||
<!-- <i class="fa fa-fw fa-twitter"></i>-->
|
||||
<!-- </a>-->
|
||||
<!-- </li>-->
|
||||
<!-- <li class="list-inline-item">-->
|
||||
<!-- <a class="btn btn-outline-light btn-social text-center rounded-circle" href="https://owasp.slack.com/messages/#project-webgoat/">-->
|
||||
<!-- <i class="fa fa-fw fa-slack"></i>-->
|
||||
<!-- </a>-->
|
||||
<!-- </li>-->
|
||||
<!-- </ul>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </footer>-->
|
||||
|
||||
<!-- <div class="copyright py-4 text-center text-white">-->
|
||||
<!-- <div class="container">-->
|
||||
<!-- <small>Team WebGoat 2019</small>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<!-- <!– Scroll to Top Button (Only visible on small and extra-small screen sizes) –>-->
|
||||
<!-- <div class="scroll-to-top d-lg-none position-fixed ">-->
|
||||
<!-- <a class="js-scroll-trigger d-block text-center text-white rounded" href="#page-top">-->
|
||||
<!-- <i class="fa fa-chevron-up"></i>-->
|
||||
<!-- </a>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<!-- <!– Explain modal –>-->
|
||||
<!-- <div class="portfolio-modal mfp-hide" id="portfolio-modal-1">-->
|
||||
<!-- <div class="portfolio-modal-dialog bg-white">-->
|
||||
<!-- <a class="close-button d-none d-md-block portfolio-modal-dismiss" href="#">-->
|
||||
<!-- <i class="fa fa-3x fa-times"></i>-->
|
||||
<!-- </a>-->
|
||||
<!-- <div class="container text-center">-->
|
||||
<!-- <div class="row">-->
|
||||
<!-- <div class="col-lg-8 mx-auto">-->
|
||||
<!-- <h3 class="text-secondary text-uppercase mb-0">Explain the vulnerability</h3>-->
|
||||
<!-- <hr class="star-dark mb-5">-->
|
||||
<!-- <img class="img-fluid mb-5" src="img/portfolio/lesson.png" alt="">-->
|
||||
<!-- <p class="mb-5">Teaching is now a first class citizen of WebGoat, we explain explain the vulnerability. Instead of 'just hacking' we now focus on explaining from the beginning what for example a SQL injection is.-->
|
||||
<!-- </p>-->
|
||||
<!-- <a class="btn btn-primary btn-lg rounded-pill portfolio-modal-dismiss" href="#">-->
|
||||
<!-- <i class="fa fa-close"></i>-->
|
||||
<!-- Close</a>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<!-- <!– Assignment modal –>-->
|
||||
<!-- <div class="portfolio-modal mfp-hide" id="portfolio-modal-2">-->
|
||||
<!-- <div class="portfolio-modal-dialog bg-white">-->
|
||||
<!-- <a class="close-button d-none d-md-block portfolio-modal-dismiss" href="#">-->
|
||||
<!-- <i class="fa fa-3x fa-times"></i>-->
|
||||
<!-- </a>-->
|
||||
<!-- <div class="container text-center">-->
|
||||
<!-- <div class="row">-->
|
||||
<!-- <div class="col-lg-8 mx-auto">-->
|
||||
<!-- <h3 class="text-secondary text-uppercase mb-0">Learn by doing</h3>-->
|
||||
<!-- <hr class="star-dark mb-5">-->
|
||||
<!-- <img class="img-fluid mb-5" src="img/portfolio/assignment-example.png" alt="">-->
|
||||
<!-- <p class="mb-5">During the explanation of a vulnerability we build assignments which will help you understand how it works.</p>-->
|
||||
<!-- <a class="btn btn-primary btn-lg rounded-pill portfolio-modal-dismiss" href="#">-->
|
||||
<!-- <i class="fa fa-close"></i>-->
|
||||
<!-- Close</a>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<!-- <!– Mitigation modal –>-->
|
||||
<!-- <div class="portfolio-modal mfp-hide" id="portfolio-modal-3">-->
|
||||
<!-- <div class="portfolio-modal-dialog bg-white">-->
|
||||
<!-- <a class="close-button d-none d-md-block portfolio-modal-dismiss" href="#">-->
|
||||
<!-- <i class="fa fa-3x fa-times"></i>-->
|
||||
<!-- </a>-->
|
||||
<!-- <div class="container text-center">-->
|
||||
<!-- <div class="row">-->
|
||||
<!-- <div class="col-lg-8 mx-auto">-->
|
||||
<!-- <h3 class="text-secondary text-uppercase mb-0">Explain mitigations</h3>-->
|
||||
<!-- <hr class="star-dark mb-5">-->
|
||||
<!-- <img class="img-fluid mb-5" src="img/portfolio/mitigation-example.png" alt="">-->
|
||||
<!-- <p class="mb-5">At the end of each lesson you will receive an overview of possible mitigations which will help you during your development work.</p>-->
|
||||
<!-- <a class="btn btn-primary btn-lg rounded-pill portfolio-modal-dismiss" href="#">-->
|
||||
<!-- <i class="fa fa-close"></i>-->
|
||||
<!-- Close</a>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<!-- <!– Bootstrap core JavaScript –>-->
|
||||
<!-- <script src="vendor/jquery/jquery.min.js"></script>-->
|
||||
<!-- <script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>-->
|
||||
|
||||
<!-- <!– Plugin JavaScript –>-->
|
||||
<!-- <script src="vendor/jquery-easing/jquery.easing.min.js"></script>-->
|
||||
<!-- <script src="vendor/magnific-popup/jquery.magnific-popup.min.js"></script>-->
|
||||
|
||||
<!-- <!– Custom scripts for this template –>-->
|
||||
<!-- <script src="js/freelancer.min.js"></script>-->
|
||||
|
||||
<!--</body>-->
|
||||
|
||||
<!--</html>-->
|
75
docs/js/freelancer.js
Normal file
@ -0,0 +1,75 @@
|
||||
(function($) {
|
||||
"use strict"; // Start of use strict
|
||||
|
||||
// Smooth scrolling using jQuery easing
|
||||
$('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() {
|
||||
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
|
||||
var target = $(this.hash);
|
||||
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
|
||||
if (target.length) {
|
||||
$('html, body').animate({
|
||||
scrollTop: (target.offset().top - 70)
|
||||
}, 1000, "easeInOutExpo");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Scroll to top button appear
|
||||
$(document).scroll(function() {
|
||||
var scrollDistance = $(this).scrollTop();
|
||||
if (scrollDistance > 100) {
|
||||
$('.scroll-to-top').fadeIn();
|
||||
} else {
|
||||
$('.scroll-to-top').fadeOut();
|
||||
}
|
||||
});
|
||||
|
||||
// Closes responsive menu when a scroll trigger link is clicked
|
||||
$('.js-scroll-trigger').click(function() {
|
||||
$('.navbar-collapse').collapse('hide');
|
||||
});
|
||||
|
||||
// Activate scrollspy to add active class to navbar items on scroll
|
||||
$('body').scrollspy({
|
||||
target: '#mainNav',
|
||||
offset: 80
|
||||
});
|
||||
|
||||
// Collapse Navbar
|
||||
var navbarCollapse = function() {
|
||||
if ($("#mainNav").offset().top > 100) {
|
||||
$("#mainNav").addClass("navbar-shrink");
|
||||
} else {
|
||||
$("#mainNav").removeClass("navbar-shrink");
|
||||
}
|
||||
};
|
||||
// Collapse now if page is not at top
|
||||
navbarCollapse();
|
||||
// Collapse the navbar when page is scrolled
|
||||
$(window).scroll(navbarCollapse);
|
||||
|
||||
// Modal popup$(function () {
|
||||
$('.portfolio-item').magnificPopup({
|
||||
type: 'inline',
|
||||
preloader: false,
|
||||
focus: '#username',
|
||||
modal: true
|
||||
});
|
||||
$(document).on('click', '.portfolio-modal-dismiss', function(e) {
|
||||
e.preventDefault();
|
||||
$.magnificPopup.close();
|
||||
});
|
||||
|
||||
// Floating label headings for the contact form
|
||||
$(function() {
|
||||
$("body").on("input propertychange", ".floating-label-form-group", function(e) {
|
||||
$(this).toggleClass("floating-label-form-group-with-value", !!$(e.target).val());
|
||||
}).on("focus", ".floating-label-form-group", function() {
|
||||
$(this).addClass("floating-label-form-group-with-focus");
|
||||
}).on("blur", ".floating-label-form-group", function() {
|
||||
$(this).removeClass("floating-label-form-group-with-focus");
|
||||
});
|
||||
});
|
||||
|
||||
})(jQuery); // End of use strict
|
7
docs/js/freelancer.min.js
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
/*!
|
||||
* Start Bootstrap - Freelancer v5.0.2 (https://startbootstrap.com/template-overviews/freelancer)
|
||||
* Copyright 2013-2019 Start Bootstrap
|
||||
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
!function(t){"use strict";t('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function(){if(location.pathname.replace(/^\//,"")==this.pathname.replace(/^\//,"")&&location.hostname==this.hostname){var o=t(this.hash);if((o=o.length?o:t("[name="+this.hash.slice(1)+"]")).length)return t("html, body").animate({scrollTop:o.offset().top-70},1e3,"easeInOutExpo"),!1}}),t(document).scroll(function(){100<t(this).scrollTop()?t(".scroll-to-top").fadeIn():t(".scroll-to-top").fadeOut()}),t(".js-scroll-trigger").click(function(){t(".navbar-collapse").collapse("hide")}),t("body").scrollspy({target:"#mainNav",offset:80});var o=function(){100<t("#mainNav").offset().top?t("#mainNav").addClass("navbar-shrink"):t("#mainNav").removeClass("navbar-shrink")};o(),t(window).scroll(o),t(".portfolio-item").magnificPopup({type:"inline",preloader:!1,focus:"#username",modal:!0}),t(document).on("click",".portfolio-modal-dismiss",function(o){o.preventDefault(),t.magnificPopup.close()}),t(function(){t("body").on("input propertychange",".floating-label-form-group",function(o){t(this).toggleClass("floating-label-form-group-with-value",!!t(o.target).val())}).on("focus",".floating-label-form-group",function(){t(this).addClass("floating-label-form-group-with-focus")}).on("blur",".floating-label-form-group",function(){t(this).removeClass("floating-label-form-group-with-focus")})})}(jQuery);
|
6595
docs/package-lock.json
generated
Normal file
47
docs/package.json
Normal file
@ -0,0 +1,47 @@
|
||||
{
|
||||
"title": "Freelancer",
|
||||
"name": "startbootstrap-freelancer",
|
||||
"version": "5.0.2",
|
||||
"description": "A freelancer portfolio HTML theme for Bootstrap.",
|
||||
"keywords": [
|
||||
"css",
|
||||
"sass",
|
||||
"html",
|
||||
"responsive",
|
||||
"theme",
|
||||
"template"
|
||||
],
|
||||
"homepage": "https://startbootstrap.com/template-overviews/freelancer",
|
||||
"bugs": {
|
||||
"url": "https://github.com/BlackrockDigital/startbootstrap-freelancer/issues",
|
||||
"email": "feedback@startbootstrap.com"
|
||||
},
|
||||
"license": "MIT",
|
||||
"author": "Start Bootstrap",
|
||||
"contributors": [
|
||||
"David Miller (http://davidmiller.io/)"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/BlackrockDigital/startbootstrap-freelancer.git"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "5.7.0",
|
||||
"bootstrap": "4.2.1",
|
||||
"jquery": "3.3.1",
|
||||
"jquery.easing": "^1.4.1",
|
||||
"magnific-popup": "^1.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"browser-sync": "2.26.3",
|
||||
"gulp": "4.0.0",
|
||||
"gulp-autoprefixer": "6.0.0",
|
||||
"gulp-clean-css": "4.0.0",
|
||||
"gulp-filter": "5.1.0",
|
||||
"gulp-header": "2.0.7",
|
||||
"gulp-plumber": "^1.2.1",
|
||||
"gulp-rename": "1.4.0",
|
||||
"gulp-sass": "4.0.2",
|
||||
"gulp-uglify": "3.0.1"
|
||||
}
|
||||
}
|
51
docs/scss/_bootstrap-overrides.scss
Normal file
@ -0,0 +1,51 @@
|
||||
// Bootstrap overrides for this template
|
||||
a {
|
||||
color: $primary;
|
||||
&:focus,
|
||||
&:hover,
|
||||
&:active {
|
||||
color: darken($primary, 10%);
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
border-width: 2px;
|
||||
}
|
||||
|
||||
.bg-primary {
|
||||
background-color: $primary !important;
|
||||
}
|
||||
|
||||
.bg-secondary {
|
||||
background-color: $secondary !important;
|
||||
}
|
||||
|
||||
.text-primary {
|
||||
color: $primary !important;
|
||||
}
|
||||
|
||||
.text-secondary {
|
||||
color: $secondary !important;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: $primary;
|
||||
border-color: $primary;
|
||||
&:hover,
|
||||
&:focus,
|
||||
&:active {
|
||||
background-color: darken($primary, 10%);
|
||||
border-color: darken($primary, 10%);
|
||||
}
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
background-color: $secondary;
|
||||
border-color: $secondary;
|
||||
&:hover,
|
||||
&:focus,
|
||||
&:active {
|
||||
background-color: darken($secondary, 10%);
|
||||
border-color: darken($secondary, 10%);
|
||||
}
|
||||
}
|
54
docs/scss/_contact.scss
Normal file
@ -0,0 +1,54 @@
|
||||
// Styling for the contact section
|
||||
.floating-label-form-group {
|
||||
position: relative;
|
||||
border-bottom: 1px solid $gray-200;
|
||||
input,
|
||||
textarea {
|
||||
font-size: 1.5em;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
padding-right: 0;
|
||||
padding-left: 0;
|
||||
resize: none;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
background: none;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
label {
|
||||
font-size: 0.85em;
|
||||
line-height: 1.764705882em;
|
||||
position: relative;
|
||||
z-index: 0;
|
||||
top: 2em;
|
||||
display: block;
|
||||
margin: 0;
|
||||
-webkit-transition: top 0.3s ease, opacity 0.3s ease;
|
||||
-moz-transition: top 0.3s ease, opacity 0.3s ease;
|
||||
-ms-transition: top 0.3s ease, opacity 0.3s ease;
|
||||
transition: top 0.3s ease, opacity 0.3s ease;
|
||||
vertical-align: middle;
|
||||
vertical-align: baseline;
|
||||
opacity: 0;
|
||||
}
|
||||
&:not(:first-child) {
|
||||
padding-left: 14px;
|
||||
border-left: 1px solid $gray-200;
|
||||
}
|
||||
}
|
||||
|
||||
.floating-label-form-group-with-value {
|
||||
label {
|
||||
top: 0;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.floating-label-form-group-with-focus {
|
||||
label {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
form .row:first-child .floating-label-form-group {
|
||||
border-top: 1px solid $gray-200;
|
||||
}
|
10
docs/scss/_footer.scss
Normal file
@ -0,0 +1,10 @@
|
||||
.footer {
|
||||
padding-top: 5rem;
|
||||
padding-bottom: 5rem;
|
||||
background-color: $secondary;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.copyright {
|
||||
background-color: darken($secondary, 10%);
|
||||
}
|
98
docs/scss/_global.scss
Normal file
@ -0,0 +1,98 @@
|
||||
// Typography
|
||||
body {
|
||||
@include body-font;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
@include heading-font;
|
||||
}
|
||||
|
||||
// Custom Horizontal Rule with Star Icon
|
||||
hr.star-light,
|
||||
hr.star-dark {
|
||||
max-width: 15rem;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
border: none;
|
||||
border-top: solid 0.25rem;
|
||||
margin-top: 2.5rem;
|
||||
margin-bottom: 2.5rem;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
hr.star-light:after,
|
||||
hr.star-dark:after {
|
||||
position: relative;
|
||||
top: -.8em;
|
||||
display: inline-block;
|
||||
padding: 0 0.25em;
|
||||
content: '\f005';
|
||||
font-family: "Font Awesome 5 Free";
|
||||
font-weight: 900;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
hr.star-light {
|
||||
border-color: $white;
|
||||
}
|
||||
hr.star-light:after {
|
||||
color: $white;
|
||||
background-color: $primary;
|
||||
}
|
||||
|
||||
hr.star-dark {
|
||||
border-color: $secondary;
|
||||
}
|
||||
hr.star-dark:after {
|
||||
color: $secondary;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
// Section Padding Settings
|
||||
section {
|
||||
padding: 6rem 0;
|
||||
h2 {
|
||||
font-size: 2.25rem;
|
||||
line-height: 2rem;
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
h2 {
|
||||
font-size: 3rem;
|
||||
line-height: 2.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Custom Button Size
|
||||
.btn-xl {
|
||||
padding: 1rem 1.75rem;
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
// Custom Rounded Social Button
|
||||
.btn-social {
|
||||
width: 3.25rem;
|
||||
height: 3.25rem;
|
||||
font-size: 1.25rem;
|
||||
line-height: 2rem;
|
||||
}
|
||||
|
||||
// Scroll to Top Button
|
||||
.scroll-to-top {
|
||||
z-index: 1042;
|
||||
right: 1rem;
|
||||
bottom: 1rem;
|
||||
display: none;
|
||||
a {
|
||||
width: 3.5rem;
|
||||
height: 3.5rem;
|
||||
background-color: fade-out($gray-900, 0.5);
|
||||
line-height: 3.1rem;
|
||||
}
|
||||
}
|
26
docs/scss/_masthead.scss
Normal file
@ -0,0 +1,26 @@
|
||||
header.masthead {
|
||||
padding-top: calc(6rem + 72px);
|
||||
padding-bottom: 6rem;
|
||||
h1 {
|
||||
font-size: 3rem;
|
||||
line-height: 3rem;
|
||||
}
|
||||
h2 {
|
||||
font-size: 1.3rem;
|
||||
@include body-font;
|
||||
}
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
header.masthead {
|
||||
padding-top: calc(6rem + 106px);
|
||||
padding-bottom: 6rem;
|
||||
h1 {
|
||||
font-size: 4.75em;
|
||||
line-height: 4rem;
|
||||
}
|
||||
h2 {
|
||||
font-size: 1.75em;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
8
docs/scss/_mixins.scss
Normal file
@ -0,0 +1,8 @@
|
||||
@mixin body-font() {
|
||||
font-family: 'Lato';
|
||||
}
|
||||
|
||||
@mixin heading-font() {
|
||||
font-weight: 700;
|
||||
font-family: 'Montserrat';
|
||||
}
|
67
docs/scss/_navbar.scss
Normal file
@ -0,0 +1,67 @@
|
||||
// Styling for the navbar
|
||||
#mainNav {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 1rem;
|
||||
@include heading-font;
|
||||
.navbar-brand {
|
||||
color: $white;
|
||||
}
|
||||
.navbar-nav {
|
||||
margin-top: 1rem;
|
||||
letter-spacing: 0.0625rem;
|
||||
li.nav-item {
|
||||
a.nav-link {
|
||||
color: $white;
|
||||
&:hover {
|
||||
color: $primary;
|
||||
}
|
||||
&:active,
|
||||
&:focus {
|
||||
color: $white;
|
||||
}
|
||||
&.active {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navbar-toggler {
|
||||
font-size: 80%;
|
||||
padding: 0.8rem;
|
||||
}
|
||||
}
|
||||
@media(min-width:992px) {
|
||||
#mainNav {
|
||||
padding-top: 1.5rem;
|
||||
padding-bottom: 1.5rem;
|
||||
-webkit-transition: padding-top 0.3s, padding-bottom 0.3s;
|
||||
-moz-transition: padding-top 0.3s, padding-bottom 0.3s;
|
||||
transition: padding-top 0.3s, padding-bottom 0.3s;
|
||||
.navbar-brand {
|
||||
font-size: 2em;
|
||||
-webkit-transition: font-size 0.3s;
|
||||
-moz-transition: font-size 0.3s;
|
||||
transition: font-size 0.3s;
|
||||
}
|
||||
.navbar-nav {
|
||||
margin-top: 0;
|
||||
}
|
||||
.navbar-nav > li.nav-item > a.nav-link.active {
|
||||
color: $white;
|
||||
background: $primary;
|
||||
&:active,
|
||||
&:focus,
|
||||
&:hover {
|
||||
color: $white;
|
||||
background: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
#mainNav.navbar-shrink {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
.navbar-brand {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
}
|
||||
}
|
63
docs/scss/_portfolio.scss
Normal file
@ -0,0 +1,63 @@
|
||||
// Styling for the portfolio section
|
||||
.portfolio {
|
||||
margin-bottom: -15px;
|
||||
.portfolio-item {
|
||||
position: relative;
|
||||
display: block;
|
||||
max-width: 25rem;
|
||||
margin-bottom: 15px;
|
||||
.portfolio-item-caption {
|
||||
-webkit-transition: all ease 0.5s;
|
||||
-moz-transition: all ease 0.5s;
|
||||
transition: all ease 0.5s;
|
||||
opacity: 0;
|
||||
background-color: fade-out($primary, .1);
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
.portfolio-item-caption-content {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
@media (min-width: 576px) {
|
||||
margin-bottom: -30px;
|
||||
.portfolio-item {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.portfolio-modal {
|
||||
.portfolio-modal-dialog {
|
||||
padding: 3rem 1rem;
|
||||
min-height: calc(100vh - 2rem);
|
||||
margin: 1rem calc(1rem - 8px);
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
-moz-box-shadow: 0 0 3rem 1rem fade-out(black, .5);
|
||||
-webkit-box-shadow: 0 0 3rem 1rem fade-out(black, .5);
|
||||
box-shadow: 0 0 3rem 1rem fade-out(black, .5);
|
||||
.close-button {
|
||||
position: absolute;
|
||||
top: 2rem;
|
||||
right: 2rem;
|
||||
i {
|
||||
line-height: 38px;
|
||||
}
|
||||
}
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
@media(min-width: 768px) {
|
||||
.portfolio-modal-dialog {
|
||||
min-height: 100vh;
|
||||
padding: 5rem;
|
||||
margin: 3rem calc(3rem - 8px);
|
||||
h2 {
|
||||
font-size: 3rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
16
docs/scss/_variables.scss
Normal file
@ -0,0 +1,16 @@
|
||||
// Variables
|
||||
|
||||
$white: #fff !default;
|
||||
$gray-100: #f8f9fa !default;
|
||||
$gray-200: #e9ecef !default;
|
||||
$gray-300: #dee2e6 !default;
|
||||
$gray-400: #ced4da !default;
|
||||
$gray-500: #adb5bd !default;
|
||||
$gray-600: #868e96 !default;
|
||||
$gray-700: #495057 !default;
|
||||
$gray-800: #343a40 !default;
|
||||
$gray-900: #212529 !default;
|
||||
$black: #000 !default;
|
||||
|
||||
$primary: #18BC9C !default;
|
||||
$secondary: #2C3E50 !default;
|
9
docs/scss/freelancer.scss
Normal file
@ -0,0 +1,9 @@
|
||||
@import "variables.scss";
|
||||
@import "mixins.scss";
|
||||
@import "global.scss";
|
||||
@import "navbar.scss";
|
||||
@import "masthead.scss";
|
||||
@import "portfolio.scss";
|
||||
@import "contact.scss";
|
||||
@import "footer.scss";
|
||||
@import "bootstrap-overrides.scss";
|
9887
docs/vendor/bootstrap/css/bootstrap.css
vendored
Normal file
1
docs/vendor/bootstrap/css/bootstrap.css.map
vendored
Normal file
7
docs/vendor/bootstrap/css/bootstrap.min.css
vendored
Normal file
1
docs/vendor/bootstrap/css/bootstrap.min.css.map
vendored
Normal file
6818
docs/vendor/bootstrap/js/bootstrap.bundle.js
vendored
Normal file
1
docs/vendor/bootstrap/js/bootstrap.bundle.js.map
vendored
Normal file
7
docs/vendor/bootstrap/js/bootstrap.bundle.min.js
vendored
Normal file
1
docs/vendor/bootstrap/js/bootstrap.bundle.min.js.map
vendored
Normal file
4249
docs/vendor/bootstrap/js/bootstrap.js
vendored
Normal file
1
docs/vendor/bootstrap/js/bootstrap.js.map
vendored
Normal file
7
docs/vendor/bootstrap/js/bootstrap.min.js
vendored
Normal file
1
docs/vendor/bootstrap/js/bootstrap.min.js.map
vendored
Normal file
2337
docs/vendor/font-awesome/css/font-awesome.css
vendored
Normal file
7
docs/vendor/font-awesome/css/font-awesome.css.map
vendored
Normal file
4
docs/vendor/font-awesome/css/font-awesome.min.css
vendored
Normal file
BIN
docs/vendor/font-awesome/fonts/FontAwesome.otf
vendored
Normal file
BIN
docs/vendor/font-awesome/fonts/fontawesome-webfont.eot
vendored
Normal file
2671
docs/vendor/font-awesome/fonts/fontawesome-webfont.svg
vendored
Normal file
After Width: | Height: | Size: 434 KiB |