From f42fea5c9e68e67cf29781685f1fe4cfd4446e23 Mon Sep 17 00:00:00 2001
From: Tony Cheung
Date: Tue, 8 Jun 2021 17:44:45 +0800
Subject: [PATCH] Added README to provide .net instruction
---
README.md | 22 +++++++++++-------
images/00-repo-security-tab.png | Bin 0 -> 174859 bytes
.../01-repo-secruity-setup-code-scanning.png | Bin 0 -> 214722 bytes
...02-repo-security-setup-codeql-workflow.png | Bin 0 -> 159734 bytes
images/03-actions-sample-workflow.png | Bin 0 -> 112442 bytes
images/03a-csharp-scanning.png | Bin 0 -> 15784 bytes
images/04-actions-sample-events.png | Bin 0 -> 21053 bytes
images/05-actions-completed.png | Bin 0 -> 55552 bytes
images/06-security-codeql-alert.png | Bin 0 -> 89816 bytes
images/06-select-cross-site-scripting.png | Bin 0 -> 106528 bytes
images/07-security-codeql-show-more.png | Bin 0 -> 27885 bytes
images/08-security-codeql-full-desc.png | Bin 0 -> 61341 bytes
images/09-security-codeql-show-paths.png | Bin 0 -> 94237 bytes
.../10-security-codeql-show-paths-details.png | Bin 0 -> 146253 bytes
images/11-fix-source-code.png | Bin 0 -> 75071 bytes
images/12-fix-pr-in-progress.png | Bin 0 -> 131069 bytes
images/13-fix-pr-done.png | Bin 0 -> 55014 bytes
images/14-fix-detail.png | Bin 0 -> 121627 bytes
images/15-fixed-alert.png | Bin 0 -> 85817 bytes
images/16-fix-history.png | Bin 0 -> 134036 bytes
20 files changed, 14 insertions(+), 8 deletions(-)
create mode 100644 images/00-repo-security-tab.png
create mode 100644 images/01-repo-secruity-setup-code-scanning.png
create mode 100644 images/02-repo-security-setup-codeql-workflow.png
create mode 100644 images/03-actions-sample-workflow.png
create mode 100644 images/03a-csharp-scanning.png
create mode 100644 images/04-actions-sample-events.png
create mode 100644 images/05-actions-completed.png
create mode 100644 images/06-security-codeql-alert.png
create mode 100644 images/06-select-cross-site-scripting.png
create mode 100644 images/07-security-codeql-show-more.png
create mode 100644 images/08-security-codeql-full-desc.png
create mode 100644 images/09-security-codeql-show-paths.png
create mode 100644 images/10-security-codeql-show-paths-details.png
create mode 100644 images/11-fix-source-code.png
create mode 100644 images/12-fix-pr-in-progress.png
create mode 100644 images/13-fix-pr-done.png
create mode 100644 images/14-fix-detail.png
create mode 100644 images/15-fixed-alert.png
create mode 100644 images/16-fix-history.png
diff --git a/README.md b/README.md
index 45c1c0e..f36a510 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-# Code Scanning Javascript Tutorial
+# Code Scanning C# Tutorial
-Welcome to the Code Scanning Java Tutorial! This tutorial will take you through how to set up Github Advanced Security: Code Scanning as well as interpret results that it may find. The following repository contains SQL injection vulnerability for demonstration purpose.
+Welcome to the Code Scanning C# Tutorial! This tutorial will take you through how to set up Github Advanced Security: Code Scanning as well as interpret results that it may find. The following repository contains cross-site scripting vulnerability for demonstration purpose.
## Introduction
@@ -62,6 +62,10 @@ The Actions Workflow file contains a number of different sections including:
+Please change `line 35` to only use `csharp` for this demonstration purpose.
+
+
+
Click `Start Commit` -> `Commit this file` to commit the changes to _main_ branch.
@@ -107,7 +111,9 @@ Click the specific workflow run. You can view the progress of the Workflow run u
Security Issues
-Once the Workflow has completed, click the `Security` tab -> ` Code Scanning Alerts`. An security alert "Query built from user-controlled sources" should be visible.
+Once the Workflow has completed, click the `Security` tab -> ` Code Scanning Alerts`. You can see 29 alerts, select the first "Cross-site scripting" alert.
+
+
#### Security Alert View
@@ -157,13 +163,13 @@ Click `show paths` in order to see the dataflow path that resulted in this alert
Fix the Security Alert
-In order to fix this specific alert, we will need to ensure parameters used in the SQL query is validated and sanitized.
+In order to fix this specific alert, we will need to ensure the content being write to the `HttpContext`'s response is validated and sanitized.
-Click on the `Code` tab and [Edit](https://docs.github.com/en/free-pro-team@latest/github/managing-files-in-a-repository/editing-files-in-your-repository) the file [`IndexController.java`](./src/main/java/com/github/hackathon/advancedsecurityjava/Controllers/IndexController.java) in the `Controllers` folder, replace the content with the file [`fixme`](./fixme).
+Click on the `Code` tab and [Edit](https://docs.github.com/en/free-pro-team@latest/github/managing-files-in-a-repository/editing-files-in-your-repository) the file [`Autocomplete.ashx.cs`](./WebGoat/WebGoatCoins/Autocomplete.ashx.cs) in the `WebGoat/WebGoatCoins` folder. For this demonstration purpose, we will simply write some hardcoded value to the `HttpContext` instance, this granatees the parameter is sanitized and safe.
-Click `Create a new branch for this commit and start a pull request`, name the branch `fix-sql-injection`, and create the Pull Request.
+Click `Create a new branch for this commit and start a pull request`, name the branch `fix-cross-site-scripting`, and create the Pull Request.
#### Pull Request Status Check
@@ -179,7 +185,7 @@ After the Workflow has completed click on `Details` by the `Code Scanning Result
#### Fixed Alert
-Notice that Code Scanning has detected that this Pull Request will fix the SQL injection vulnerability that was detected before.
+Notice that Code Scanning has detected that this Pull Request will fix the cross-site scripting vulnerability that was detected before.
@@ -187,7 +193,7 @@ Merge the Pull Request. After the Pull Request has been merged, another Workflow
#### Closed Security Alerts
-After the final Workflow has completed, navigate back to the `Security` tab and click `Closed`. Notice that the **Query built from user-controlled sources** security alert now shows up as a closed issue.
+After the final Workflow has completed, navigate back to the `Security` tab and click `Closed`. Notice that the **Cross-site scripting** security alert now shows up as a closed issue.
diff --git a/images/00-repo-security-tab.png b/images/00-repo-security-tab.png
new file mode 100644
index 0000000000000000000000000000000000000000..0b138f105440f33ac395c9d5206300583468529c
GIT binary patch
literal 174859
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