SlideShare une entreprise Scribd logo
1  sur  82
Télécharger pour lire hors ligne
OWASP Juice Shop
Achieving sustainability for open source projects
https://www.owasp.org/index.php/OWASP_Juice_Shop_Project
Presentation by /Björn Kimminich @bkimminich
0  Tweet Follow @owasp_juiceshop Follow @bkimminich Follow @bkimminich 151 Star 346Like 59
Chapter One
WAT?
OWASP Juice Shop...
...is an intentionally insecure webapp written in
Node.js, Express and AngularJS. It contains 38+
hacking challenges of varying di៝�culty tracked on
a score board.
Modern Web-Architecture
Javascript all the way from UI to REST API
OWASP Juice Shop CTF...
...is a commandline tool written in Node.js and
published on NPM.js. It helps you to set up and
host CTF events on the platform with the Juice
Shop challenges.
CTFd
<!‐‐ uncomment this and the following slide **ONLY** if...
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐>
<!‐‐ ...Juice Shop got promoted to  Lab  Project 
during the Project Summit prior to this AppSecEU! :‐D
The next OWASP Connector should make this official! (But you heard it here first!)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐>
Chapter Two
Open Source
Antipatterns
Barren README
An empty or lackluster front-page radiates the impression that
nobody takes serious care of the project.
Bad Example
Worse Example
Worst Example
Good Example
Better(?) Example
Pile of Issues
Open issues pile up in the ticketing system, most of them
unanswered and unattended.
A pile of unattended issues
(🤔)
Really a 💩-pile of unattended issues
Counter: Use  labels  properly
Agile Counter: Kanban Board
https://huboard.com/bkimminich/juice-shop
PR Disaster
Pull Requests are routinely ignored or ៯�ogged to death.
Ignored Pull Requests
(🤔)
Example for a PR 韹�ogged to death*
https://github.com/zaproxy/zaproxy/pull/2837
*Disclaimer: This example should by no means imply that the ZAP team is routinely ៯�ogging PRs to death! On the
contrary, they o៛�er a helping hand to even those who totally ignore their !written contribution requirements
Good Counter: Contribution Guide (ZAP)
https://github.com/zaproxy/zaproxy/blob/develop/CONTRIBUTING.md#g
for-pull-request-pr-submission-and-processing
Contribution Guide (Juice Shop)
https://github.com/bkimminich/juice-
shop/blob/master/CONTRIBUTING.md
Auto Counter: 👊-enforced Coding Style
http://standardjs.com
Solecistic Versioning
The syntax (MAJOR.MINOR.PATCH) is used while
its semantics are not adhered to.
Semantic Versioning
Bad Example: AngularJS 1.x
Good Example: AngularJS 2+
Juice Shop takes it serious
For a tiny incompatible con៯�guration-៯�le change Juice Shop went from 2.26.0 to 3.0.0
Major Zero
Not even the original author thinks that the project is mature
enough to release a 1.x version from it.
Example: z85‐cli😜
Chapter Three
My little OSS
Sustainability
Toolbox
Git Flow
The master branch stores the o៝�cial release history, while
development happens on the develop branch.
Git Flow ⁒ Feature Branches
Clean Code
Clean Javascript! 😮
'use strict' 
var path = require('path') 
var utils = require('../lib/utils') 
var challenges = require('../data/datacache').challenges 
exports = module.exports = function servePremiumContent () { 
  return function (req, res) { 
    if (utils.notSolved(challenges.premiumPaywallChallenge)) { 
      utils.solve(challenges.premiumPaywallChallenge) 
    } 
    res.sendFile(path.resolve(__dirname, '../app/private/under­construction.gif')) 
  } 
}
Well, never mind...
fs.copy('app/index.template.html', 'app/index.html', {overwrite: true}, function () { 
      if (config.get('application.logo')) { 
        var logo = config.get('application.logo') 
        if (utils.startsWith(logo, 'http')) { 
          var logoPath = logo 
          logo = decodeURIComponent(logo.substring(logo.lastIndexOf('/') + 1)) 
          utils.downloadToFile(logoPath, 'app/public/images/' + logo) 
        } 
        var logoImageTag = '<img class="navbar­brand navbar­logo" src="/public/images/' + logo + 
        replace({ regex: /<img class="navbar­brand navbar­logo" (.*?)="">/, replacement: logoImag
      } 
      if (config.get('application.theme')) { 
        var themeCss = 'bower_components/bootswatch/' + config.get('application.theme') + 
        replace({ regex: /bower_components/bootswatch/.*/bootstrap.min.css/, replacement: th
      } 
    })
...it's still Javascript at the end of the day! 🤐
Test Automation
Example: UI Unit Test
it('should hold anonymous placeholder for email if current user is not logged in', 
  inject(function () { 
      $httpBackend.whenGET('/rest/user/whoami').respond(200, {user: {}}) 
      $httpBackend.flush() 
      expect(scope.userEmail).toBe('anonymous') 
  }) 
)
Example: API Integration Test
frisby.create('GET password change without passing any passwords') 
  .get(REST_URL + '/user/change­password') 
  .expectStatus(401) 
  .expectBodyContains('Password cannot be empty') 
  .toss()
No-idea-why-this-💩 -happens-snippet-injection Vulnerability: Did anyone notice how above code was totally
butchered by highlight.js beginning at the opening single quote in line 1?
Example: Challenge E2E Test
describe('challenge "loginAdmin"', function () { 
  it('should log in Admin with SQLI attack on email field using "' or 1=1­­"', function
    email.sendKeys('' or 1=1­­') 
    password.sendKeys('a') 
    loginButton.click() 
    expect(browser.getLocationAbsUrl()).toMatch(//search/) 
  }) 
  protractor.expect.challengeSolved({challenge: 'Login Admin'}) 
}) 
       
Example: Checking if a challenge is solved
protractor.expect = { 
  challengeSolved: function (context) { 
    describe('(shared)', function () { 
      beforeEach(function () { 
        browser.get('/#/score­board') 
      }) 
      it("challenge '" + context.challenge + "' should be solved on score board", function
        expect(element(by.id(context.challenge + '.solved')).getAttribute('class')).not.toMatch(
        expect(element(by.id(context.challenge + '.notSolved')).getAttribute('class')).toMatch(
      }) 
    }) 
  } 
} 
       
What is a realistic goal for Test Coverage ?
100%
Juice Shop Test Coverage
Having all tests pass after a commit means, it's
safe to merge PRs or publish a new release!
Juice Shop CTF Extension
Mutation Testing
Reality check: Do your tests actually test stu៛�?
Example: Report for Juice Shop CTF
A realistic goal for Mutation Coverage ?
100%
Juice Shop Mutation Coverage
Juice Shop CTF Extension
92%* 98%
*of the UI unit tests!
(😏)
CI/CD
Chapter undefined
Live Dual Release
What could possibly go wrong?
Release Dashboard
Juice Shop
buildbuild passingpassing buildbuild passingpassing releaserelease v3.2.0v3.2.0
CTF Extension
buildbuild passingpassing releaserelease v1.1.2v1.1.2
Chapter 3 (continued)
My little OSS
Sustainability
Toolbox
Quality Metrics
Example: Code Climate Stats
Example: bitHound Dashboard
Example: Coveralls 😡 at CTF-Extension
And now for the most important metric of all...
🚚
🚚 Truck Factor
The number of team members that would have to leave the project
to e៛�ectively kill it.
What is a realistic goal for Truck Factor ?
∞
Meaning: If the whole team leaves, a new developer can take over
and would be able to maintain & continue working on the project!
Dependency Control
Example: Gemnasium Dashboard
Chapter 4.1
New Open
Source
Antipatterns
Badge Barrage
The front-page is overcrowded with (mostly useless) information
and status badges.
Overexaggerated Example
Bad Example
Coin Flip CI
✔✔❌✔❌✔. With no code changes in between.
I wonder how our Live Release is doing...
🤞🙈😱🔮
Free beer
Some services might be free of charge for OSS projects but come
with some other hidden costs or annoyance.
Contributor Laurels
Not giving enough credit to contributors.
Easy Counter: Make them visible
Some contribs deserve bonus visibility
(CTFdSQLs🚩)
Josh Grossmann
(Customtheming🎭)
Timo Pagel
(CTF🌟/Docker📦)
Jannik Hollenbach
git commits are not everything!
Juice Shop's Crowdin Translators
https://crowdin.com/project/owasp-juice-shop
Bloggers and Podcasters
https://github.com/bkimminich/juice-shop#references
Conferences & Meetups
https://github.com/bkimminich/juice-shop#references
Pro Counter: Stickers!
Pro+ Counter: Shirts & Stuff!
Chapter NaN
Release Outcome
✔=😎 or ❌=😭?
Epic 😎/😭 Dashboard
Juice Shop
buildbuild passingpassing buildbuild passingpassing releaserelease v3.2.0v3.2.0
CTF Extension
buildbuild passingpassing releaserelease v1.1.2v1.1.2
Copyright (c) 2017
Created with - The HTML Presentation Framework
Björn Kimminich
reveal.js

Contenu connexe

Tendances

Concourse in the Real World: A Case Study in CI/CD and DevOps
Concourse in the Real World: A Case Study in CI/CD and DevOpsConcourse in the Real World: A Case Study in CI/CD and DevOps
Concourse in the Real World: A Case Study in CI/CD and DevOps
VMware Tanzu
 

Tendances (20)

Turnkey Continuous Delivery
Turnkey Continuous DeliveryTurnkey Continuous Delivery
Turnkey Continuous Delivery
 
Orchestrate Continuous Delivery with Jenkins and Docker
Orchestrate Continuous Delivery with Jenkins and DockerOrchestrate Continuous Delivery with Jenkins and Docker
Orchestrate Continuous Delivery with Jenkins and Docker
 
(GAM404) Gaming DevOps: Scopely's Continuous Deployment Pipeline | AWS re:Inv...
(GAM404) Gaming DevOps: Scopely's Continuous Deployment Pipeline | AWS re:Inv...(GAM404) Gaming DevOps: Scopely's Continuous Deployment Pipeline | AWS re:Inv...
(GAM404) Gaming DevOps: Scopely's Continuous Deployment Pipeline | AWS re:Inv...
 
Wuff: Building Eclipse Applications and Plugins with Gradle
Wuff: Building Eclipse Applications and Plugins with GradleWuff: Building Eclipse Applications and Plugins with Gradle
Wuff: Building Eclipse Applications and Plugins with Gradle
 
Front matter: Next Level Front End Deployments on OpenShift
Front matter: Next Level Front End Deployments on OpenShiftFront matter: Next Level Front End Deployments on OpenShift
Front matter: Next Level Front End Deployments on OpenShift
 
Gretty: Managing Web Containers with Gradle
Gretty: Managing Web Containers with GradleGretty: Managing Web Containers with Gradle
Gretty: Managing Web Containers with Gradle
 
Concourse in the Real World: A Case Study in CI/CD and DevOps
Concourse in the Real World: A Case Study in CI/CD and DevOpsConcourse in the Real World: A Case Study in CI/CD and DevOps
Concourse in the Real World: A Case Study in CI/CD and DevOps
 
Eclipse RCP outside of Eclipse IDE - Gradle to the rescue!
Eclipse RCP outside of Eclipse IDE - Gradle to the rescue!Eclipse RCP outside of Eclipse IDE - Gradle to the rescue!
Eclipse RCP outside of Eclipse IDE - Gradle to the rescue!
 
Advanced deployment scenarios
Advanced deployment scenariosAdvanced deployment scenarios
Advanced deployment scenarios
 
Continuous integration in games development
Continuous integration in games developmentContinuous integration in games development
Continuous integration in games development
 
Back to basic: continuous integration (Madrid DevOps)
Back to basic: continuous integration (Madrid DevOps)Back to basic: continuous integration (Madrid DevOps)
Back to basic: continuous integration (Madrid DevOps)
 
Build Automation in Android
Build Automation in AndroidBuild Automation in Android
Build Automation in Android
 
Tips & Tricks for Maven Tycho
Tips & Tricks for Maven TychoTips & Tricks for Maven Tycho
Tips & Tricks for Maven Tycho
 
Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)
 
Symfony2 Specification by examples
Symfony2   Specification by examplesSymfony2   Specification by examples
Symfony2 Specification by examples
 
TechEvent OpenShift for Developers
TechEvent OpenShift for DevelopersTechEvent OpenShift for Developers
TechEvent OpenShift for Developers
 
Vue js & vue cli 3 plugins to boost up the performance of your application
Vue js & vue cli 3 plugins to boost up the performance of your applicationVue js & vue cli 3 plugins to boost up the performance of your application
Vue js & vue cli 3 plugins to boost up the performance of your application
 
Continuous Delivery for Microservice Architectures with Concourse & Cloud Fou...
Continuous Delivery for Microservice Architectures with Concourse & Cloud Fou...Continuous Delivery for Microservice Architectures with Concourse & Cloud Fou...
Continuous Delivery for Microservice Architectures with Concourse & Cloud Fou...
 
Automating stateful applications with kubernetes operators - Openstack Summit...
Automating stateful applications with kubernetes operators - Openstack Summit...Automating stateful applications with kubernetes operators - Openstack Summit...
Automating stateful applications with kubernetes operators - Openstack Summit...
 
Unit Test Android Without Going Bald
Unit Test Android Without Going BaldUnit Test Android Without Going Bald
Unit Test Android Without Going Bald
 

Similaire à Owasp Juice Shop: Achieving sustainability for open source projects

Introduction to Google Web Toolkit
Introduction to Google Web ToolkitIntroduction to Google Web Toolkit
Introduction to Google Web Toolkit
Didier Girard
 

Similaire à Owasp Juice Shop: Achieving sustainability for open source projects (20)

Automating the Quality
Automating the QualityAutomating the Quality
Automating the Quality
 
Flavius Ștef: Big Rewrites Without Big Risks at I T.A.K.E. Unconference
Flavius Ștef: Big Rewrites Without Big Risks at I T.A.K.E. UnconferenceFlavius Ștef: Big Rewrites Without Big Risks at I T.A.K.E. Unconference
Flavius Ștef: Big Rewrites Without Big Risks at I T.A.K.E. Unconference
 
Big rewrites without big risks
Big rewrites without big risksBig rewrites without big risks
Big rewrites without big risks
 
PVS-Studio and Continuous Integration: TeamCity. Analysis of the Open RollerC...
PVS-Studio and Continuous Integration: TeamCity. Analysis of the Open RollerC...PVS-Studio and Continuous Integration: TeamCity. Analysis of the Open RollerC...
PVS-Studio and Continuous Integration: TeamCity. Analysis of the Open RollerC...
 
JS Fest 2018. Никита Галкин. Микросервисная архитектура с переиспользуемыми к...
JS Fest 2018. Никита Галкин. Микросервисная архитектура с переиспользуемыми к...JS Fest 2018. Никита Галкин. Микросервисная архитектура с переиспользуемыми к...
JS Fest 2018. Никита Галкин. Микросервисная архитектура с переиспользуемыми к...
 
PVS-Studio in the Clouds: Azure DevOps
PVS-Studio in the Clouds: Azure DevOpsPVS-Studio in the Clouds: Azure DevOps
PVS-Studio in the Clouds: Azure DevOps
 
Static Analysis: From Getting Started to Integration
Static Analysis: From Getting Started to IntegrationStatic Analysis: From Getting Started to Integration
Static Analysis: From Getting Started to Integration
 
The future of paas is serverless
The future of paas is serverlessThe future of paas is serverless
The future of paas is serverless
 
Build reactive systems on lambda
Build reactive systems on lambdaBuild reactive systems on lambda
Build reactive systems on lambda
 
Raising ux bar with offline first design
Raising ux bar with offline first designRaising ux bar with offline first design
Raising ux bar with offline first design
 
Exploring WebXPRT 2015
Exploring WebXPRT 2015Exploring WebXPRT 2015
Exploring WebXPRT 2015
 
Introduction to Google Web Toolkit
Introduction to Google Web ToolkitIntroduction to Google Web Toolkit
Introduction to Google Web Toolkit
 
Salesforce CI (Continuous Integration) - SFDX + Bitbucket Pipelines
Salesforce CI (Continuous Integration) - SFDX + Bitbucket PipelinesSalesforce CI (Continuous Integration) - SFDX + Bitbucket Pipelines
Salesforce CI (Continuous Integration) - SFDX + Bitbucket Pipelines
 
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
 
Advanced iOS Debbuging (Reloaded)
Advanced iOS Debbuging (Reloaded)Advanced iOS Debbuging (Reloaded)
Advanced iOS Debbuging (Reloaded)
 
Enabling Lean at Enterprise Scale: Lean Engineering in Action
Enabling Lean at Enterprise Scale: Lean Engineering in ActionEnabling Lean at Enterprise Scale: Lean Engineering in Action
Enabling Lean at Enterprise Scale: Lean Engineering in Action
 
JavaEdge 2008: Your next version control system
JavaEdge 2008: Your next version control systemJavaEdge 2008: Your next version control system
JavaEdge 2008: Your next version control system
 
Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2
 
Lessons Learned from Migrating Legacy Enterprise Applications to Microservices
Lessons Learned from Migrating Legacy Enterprise Applications to MicroservicesLessons Learned from Migrating Legacy Enterprise Applications to Microservices
Lessons Learned from Migrating Legacy Enterprise Applications to Microservices
 
Containers explained as for cook and a mecanics
 Containers explained as for cook and a mecanics  Containers explained as for cook and a mecanics
Containers explained as for cook and a mecanics
 

Dernier

原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
ydyuyu
 
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
ydyuyu
 
一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理
F
 
Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...
Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...
Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...
gajnagarg
 
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu DhabiAbu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Monica Sydney
 
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
ayvbos
 
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfpdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
JOHNBEBONYAP1
 
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
ayvbos
 

Dernier (20)

原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
 
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
 
一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理
 
Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...
Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...
Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...
 
20240508 QFM014 Elixir Reading List April 2024.pdf
20240508 QFM014 Elixir Reading List April 2024.pdf20240508 QFM014 Elixir Reading List April 2024.pdf
20240508 QFM014 Elixir Reading List April 2024.pdf
 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirt
 
Best SEO Services Company in Dallas | Best SEO Agency Dallas
Best SEO Services Company in Dallas | Best SEO Agency DallasBest SEO Services Company in Dallas | Best SEO Agency Dallas
Best SEO Services Company in Dallas | Best SEO Agency Dallas
 
Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...
Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...
Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...
 
Ballia Escorts Service Girl ^ 9332606886, WhatsApp Anytime Ballia
Ballia Escorts Service Girl ^ 9332606886, WhatsApp Anytime BalliaBallia Escorts Service Girl ^ 9332606886, WhatsApp Anytime Ballia
Ballia Escorts Service Girl ^ 9332606886, WhatsApp Anytime Ballia
 
20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
20240507 QFM013 Machine Intelligence Reading List April 2024.pdf20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
 
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu DhabiAbu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
 
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
 
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
 
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
 
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrStory Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
 
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfpdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
 
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
 
APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
 
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency""Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
 

Owasp Juice Shop: Achieving sustainability for open source projects