<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE FL_Course SYSTEM "https://www.flane.de/dtd/fl_course095.dtd"><?xml-stylesheet type="text/xsl" href="https://portal.flane.ch/css/xml-course.xsl"?><course productid="36419" language="en" source="https://portal.flane.ch/swisscom/en/xml-course/cydrill-crwgaip" lastchanged="2025-10-29T08:40:00+01:00" parent="https://portal.flane.ch/swisscom/en/xml-courses"><title>Code responsibly with generative AI in Python</title><productcode>CRWGAIP</productcode><vendorcode>CY</vendorcode><vendorname>Cydrill</vendorname><fullproductcode>CY-CRWGAIP</fullproductcode><version>1.0</version><objective>&lt;ul&gt;
&lt;li&gt;Understanding the essentials of responsible AI&lt;/li&gt;&lt;li&gt;Getting familiar with essential cyber security concepts&lt;/li&gt;&lt;li&gt;Understanding how cryptography supports security&lt;/li&gt;&lt;li&gt;Learning how to use cryptographic APIs correctly in Python&lt;/li&gt;&lt;li&gt;Understanding Web application security issues&lt;/li&gt;&lt;li&gt;Detailed analysis of the OWASP Top Ten elements&lt;/li&gt;&lt;li&gt;Putting Web application security in the context of Python&lt;/li&gt;&lt;li&gt;Going beyond the low hanging fruits&lt;/li&gt;&lt;li&gt;Managing vulnerabilities in third party components&lt;/li&gt;&lt;li&gt;All this put into the context of GitHub Copilot&lt;/li&gt;&lt;/ul&gt;</objective><essentials>&lt;p&gt;General Python and Web development&lt;/p&gt;</essentials><audience>&lt;p&gt;Python developers using Copilot or other GenAI tools&lt;/p&gt;</audience><contents>&lt;h4&gt;Day 1&lt;/h4&gt;&lt;h4&gt;Coding responsibly with GenAI&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;What is responsible AI?&lt;/li&gt;&lt;li&gt;What is security?&lt;/li&gt;&lt;li&gt;Threat and risk&lt;/li&gt;&lt;li&gt;Cyber security threat types &amp;ndash; the CIA triad&lt;/li&gt;&lt;li&gt;Consequences of insecure software&lt;/li&gt;&lt;li&gt;Security and responsible AI in software development&lt;/li&gt;&lt;li&gt;GenAI tools in coding: Copilot, Codeium and others&lt;/li&gt;&lt;li&gt;The OWASP Top Ten from Copilot&amp;rsquo;s perspective
&lt;ul&gt;
&lt;li&gt;The OWASP Top Ten 2021
&lt;ul&gt;
&lt;li&gt;A01 &amp;ndash; Broken Access Control
&lt;ul&gt;
&lt;li&gt;Access control basics&lt;/li&gt;&lt;li&gt;Failure to restrict URL access&lt;/li&gt;&lt;li&gt;Confused deputy&lt;/li&gt;&lt;li&gt;Insecure direct object reference (IDOR)&lt;/li&gt;&lt;li&gt;Path traversal&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Insecure Direct Object Reference&lt;/li&gt;&lt;li&gt;Path traversal best practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Experimenting with path traversal in Copilot&lt;/li&gt;&lt;li&gt;Authorization bypass through user-controlled keys&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Remote takeover of Nexx garage doors and alarms&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Horizontal authorization (exploring with Copilot)&lt;/li&gt;&lt;li&gt;File upload
&lt;ul&gt;
&lt;li&gt;Unrestricted file upload&lt;/li&gt;&lt;li&gt;Good practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Unrestricted file upload (exploring with Copilot)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A02 &amp;ndash; Cryptographic Failures
&lt;ul&gt;
&lt;li&gt;Cryptography for developers&lt;/li&gt;&lt;li&gt;Cryptography basics&lt;/li&gt;&lt;li&gt;Cryptography in Python&lt;/li&gt;&lt;li&gt;Elementary algorithms&lt;/li&gt;&lt;li&gt;Hashing
&lt;ul&gt;
&lt;li&gt;Hashing basics&lt;/li&gt;&lt;li&gt;Hashing in Python&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Hashing in Python (exploring with Copilot)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Random number generation
&lt;ul&gt;
&lt;li&gt;Pseudo random number generators (PRNGs)&lt;/li&gt;&lt;li&gt;Cryptographically secure PRNGs&lt;/li&gt;&lt;li&gt;Weak PRNGs&lt;/li&gt;&lt;li&gt;Using random numbers&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using random numbers in Python (exploring with Copilot)&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Secure PRNG use in Copilot&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Confidentiality protection
&lt;ul&gt;
&lt;li&gt;Symmetric encryption
&lt;ul&gt;
&lt;li&gt;Block ciphers&lt;/li&gt;&lt;li&gt;Modes of operation&lt;/li&gt;&lt;li&gt;Modes of operation and IV &amp;ndash; best practices&lt;/li&gt;&lt;li&gt;Symmetric encryption in Python&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Symmetric encryption in Python (exploring with Copilot)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Asymmetric encryption&lt;/li&gt;&lt;li&gt;Combining symmetric and asymmetric algorithms&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Day 2&lt;/h4&gt;&lt;h4&gt;The OWASP Top Ten from Copilot&amp;rsquo;s perspective&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;A03 &amp;ndash; Injection
&lt;ul&gt;
&lt;li&gt;Injection principles&lt;/li&gt;&lt;li&gt;Injection attacks
&lt;ul&gt;
&lt;li&gt;SQL injection
&lt;ul&gt;
&lt;li&gt;SQL injection basics&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; SQL injection&lt;/li&gt;&lt;li&gt;Attack techniques
&lt;ul&gt;
&lt;li&gt;Content-based blind SQL injection&lt;/li&gt;&lt;li&gt;Time-based blind SQL injection&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;SQL injection best practices&lt;/li&gt;&lt;li&gt;Input validation&lt;/li&gt;&lt;li&gt;Parameterized queries&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using prepared statements&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Experimenting with SQL injection in Copilot&lt;/li&gt;&lt;li&gt;Database defense in depth&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; SQL injection against US airport security&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Code injection
&lt;ul&gt;
&lt;li&gt;Code injection via input()&lt;/li&gt;&lt;li&gt;OS command injection&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Command injection&lt;/li&gt;&lt;li&gt;OS command injection best practices&lt;/li&gt;&lt;li&gt;Avoiding command injection with the right APIs&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Command injection best practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Experimenting with command injection in Copilot&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Shellshock&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Shellshock&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Command injection in Ivanti security appliances&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;HTML injection &amp;ndash; Cross-site scripting (XSS)
&lt;ul&gt;
&lt;li&gt;Cross-site scripting basics&lt;/li&gt;&lt;li&gt;Cross-site scripting types
&lt;ul&gt;
&lt;li&gt;Persistent cross-site scripting&lt;/li&gt;&lt;li&gt;Reflected cross-site scripting&lt;/li&gt;&lt;li&gt;Client-side (DOM-based) cross-site scripting&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Stored XSS&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Reflected XSS&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; XSS to RCE in Teltonika routers&lt;/li&gt;&lt;li&gt;XSS protection best practices&lt;/li&gt;&lt;li&gt;Protection principles &amp;ndash; escaping&lt;/li&gt;&lt;li&gt;XSS protection APIs in Python&lt;/li&gt;&lt;li&gt;XSS protection in Jinja2&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; XSS fix / stored (exploring with Copilot)&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; XSS fix / reflected (exploring with Copilot)&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; XSS vulnerabilities in DrayTek Vigor routers&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A04 &amp;ndash; Insecure Design
&lt;ul&gt;
&lt;li&gt;The STRIDE model of threats&lt;/li&gt;&lt;li&gt;Secure design principles of Saltzer and Schroeder
&lt;ul&gt;
&lt;li&gt;Economy of mechanism&lt;/li&gt;&lt;li&gt;Fail-safe defaults&lt;/li&gt;&lt;li&gt;Complete mediation&lt;/li&gt;&lt;li&gt;Open design&lt;/li&gt;&lt;li&gt;Separation of privilege&lt;/li&gt;&lt;li&gt;Least privilege&lt;/li&gt;&lt;li&gt;Least common mechanism&lt;/li&gt;&lt;li&gt;Psychological acceptability&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Client-side security
&lt;ul&gt;
&lt;li&gt;Same Origin Policy&lt;/li&gt;&lt;li&gt;Simple request&lt;/li&gt;&lt;li&gt;Preflight request&lt;/li&gt;&lt;li&gt;Cross-Origin Resource Sharing (CORS)&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Same-origin policy demo&lt;/li&gt;&lt;li&gt;Frame sandboxing&lt;/li&gt;&lt;li&gt;Cross-Frame Scripting (XFS) attacks&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Clickjacking&lt;/li&gt;&lt;li&gt;Clickjacking beyond hijacking a click&lt;/li&gt;&lt;li&gt;Clickjacking protection best practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using CSP to prevent clickjacking (exploring with Copilot)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h4&gt;Day 3&lt;/h4&gt;

&lt;h4&gt;The OWASP Top Ten from Copilot&amp;rsquo;s perspective&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;A05 &amp;ndash; Security Misconfiguration
&lt;ul&gt;
&lt;li&gt;Configuration principles&lt;/li&gt;&lt;li&gt;Server misconfiguration&lt;/li&gt;&lt;li&gt;Python configuration best practices&lt;/li&gt;&lt;li&gt;Configuring Flask&lt;/li&gt;&lt;li&gt;Cookie security
&lt;ul&gt;
&lt;li&gt;Cookie attributes&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;XML entities
&lt;ul&gt;
&lt;li&gt;DTD and the entities&lt;/li&gt;&lt;li&gt;Entity expansion&lt;/li&gt;&lt;li&gt;External Entity Attack (XXE)&lt;/li&gt;&lt;li&gt;File inclusion with external entities&lt;/li&gt;&lt;li&gt;Server-Side Request Forgery with external entities&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; External entity attack&lt;/li&gt;&lt;li&gt;Preventing XXE&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Prohibiting DTD&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; XXE vulnerability in Ivanti products&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Experimenting with XXE in Copilot&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A06 &amp;ndash; Vulnerable and Outdated Components
&lt;ul&gt;
&lt;li&gt;Using vulnerable components&lt;/li&gt;&lt;li&gt;Untrusted functionality import&lt;/li&gt;&lt;li&gt;Malicious packages in Python&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; The Polyfill.io supply chain attack&lt;/li&gt;&lt;li&gt;Vulnerability management&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Finding vulnerabilities in third-party components&lt;/li&gt;&lt;li&gt;Security of AI generated code&lt;/li&gt;&lt;li&gt;Practical attacks against code generation tools&lt;/li&gt;&lt;li&gt;Dependency hallucination via generative AI&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; A history of GitHub Copilot weaknesses (up to mid 2024)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A07 &amp;ndash; Identification and Authentication Failures
&lt;ul&gt;
&lt;li&gt;Authentication
&lt;ul&gt;
&lt;li&gt;Authentication basics&lt;/li&gt;&lt;li&gt;Multi-factor authentication (MFA)&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; The InfinityGauntlet attack&lt;/li&gt;&lt;li&gt;Time-based One Time Passwords (TOTP)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Password management
&lt;ul&gt;
&lt;li&gt;Inbound password management&lt;/li&gt;&lt;li&gt;Storing account passwords&lt;/li&gt;&lt;li&gt;Password in transit&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Is just hashing passwords enough?&lt;/li&gt;&lt;li&gt;Dictionary attacks and brute forcing&lt;/li&gt;&lt;li&gt;Salting&lt;/li&gt;&lt;li&gt;Adaptive hash functions for password storage&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using adaptive hash functions in Python&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Using adaptive hash functions in Copilot&lt;/li&gt;&lt;li&gt;Password policy&lt;/li&gt;&lt;li&gt;NIST authenticator requirements for memorized secrets&lt;/li&gt;&lt;li&gt;Password database migration&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A08 &amp;ndash; Software and Data Integrity Failures
&lt;ul&gt;
&lt;li&gt;Integrity protection
&lt;ul&gt;
&lt;li&gt;Message Authentication Code (MAC)&lt;/li&gt;&lt;li&gt;Calculating HMAC in Python&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Calculating MAC in Python&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Digital signature
&lt;ul&gt;
&lt;li&gt;Digital signature in Python&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Subresource integrity
&lt;ul&gt;
&lt;li&gt;Importing JavaScript&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Importing JavaScript (exploring with Copilot)&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; The British Airways data breach&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A10 &amp;ndash; Server-side Request Forgery (SSRF)
&lt;ul&gt;
&lt;li&gt;Server-side Request Forgery (SSRF)&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; SSRF in Ivanti Connect Secure&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wrap up
&lt;ul&gt;
&lt;li&gt;Secure coding principles&lt;/li&gt;&lt;li&gt;Principles of robust programming by Matt Bishop&lt;/li&gt;&lt;li&gt;And now what?&lt;/li&gt;&lt;li&gt;Software security sources and further reading&lt;/li&gt;&lt;li&gt;Python resources&lt;/li&gt;&lt;li&gt;Responsible AI principles in software development&lt;/li&gt;&lt;li&gt;Generative AI &amp;ndash; Resources and additional guidance&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</contents><outline>&lt;ul&gt;
&lt;li&gt;Coding responsibly with GenAI&lt;/li&gt;&lt;li&gt;The OWASP Top Ten from Copilot&amp;#039;s perspective&lt;/li&gt;&lt;li&gt;Wrap up&lt;/li&gt;&lt;/ul&gt;</outline><objective_plain>- Understanding the essentials of responsible AI
- Getting familiar with essential cyber security concepts
- Understanding how cryptography supports security
- Learning how to use cryptographic APIs correctly in Python
- Understanding Web application security issues
- Detailed analysis of the OWASP Top Ten elements
- Putting Web application security in the context of Python
- Going beyond the low hanging fruits
- Managing vulnerabilities in third party components
- All this put into the context of GitHub Copilot</objective_plain><essentials_plain>General Python and Web development</essentials_plain><audience_plain>Python developers using Copilot or other GenAI tools</audience_plain><contents_plain>Day 1

Coding responsibly with GenAI


- What is responsible AI?
- What is security?
- Threat and risk
- Cyber security threat types – the CIA triad
- Consequences of insecure software
- Security and responsible AI in software development
- GenAI tools in coding: Copilot, Codeium and others
- The OWASP Top Ten from Copilot’s perspective

- The OWASP Top Ten 2021

- A01 – Broken Access Control

- Access control basics
- Failure to restrict URL access
- Confused deputy
- Insecure direct object reference (IDOR)
- Path traversal
- Lab – Insecure Direct Object Reference
- Path traversal best practices
- Lab – Experimenting with path traversal in Copilot
- Authorization bypass through user-controlled keys
- Case study – Remote takeover of Nexx garage doors and alarms
- Lab – Horizontal authorization (exploring with Copilot)
- File upload

- Unrestricted file upload
- Good practices
- Lab – Unrestricted file upload (exploring with Copilot)
- A02 – Cryptographic Failures

- Cryptography for developers
- Cryptography basics
- Cryptography in Python
- Elementary algorithms
- Hashing

- Hashing basics
- Hashing in Python
- Lab – Hashing in Python (exploring with Copilot)
- Random number generation

- Pseudo random number generators (PRNGs)
- Cryptographically secure PRNGs
- Weak PRNGs
- Using random numbers
- Lab – Using random numbers in Python (exploring with Copilot)
- Lab – Secure PRNG use in Copilot
- Confidentiality protection

- Symmetric encryption

- Block ciphers
- Modes of operation
- Modes of operation and IV – best practices
- Symmetric encryption in Python
- Lab – Symmetric encryption in Python (exploring with Copilot)
- Asymmetric encryption
- Combining symmetric and asymmetric algorithms
Day 2

The OWASP Top Ten from Copilot’s perspective


- A03 – Injection

- Injection principles
- Injection attacks

- SQL injection

- SQL injection basics
- Lab – SQL injection
- Attack techniques

- Content-based blind SQL injection
- Time-based blind SQL injection
- SQL injection best practices
- Input validation
- Parameterized queries
- Lab – Using prepared statements
- Lab – Experimenting with SQL injection in Copilot
- Database defense in depth
- Case study – SQL injection against US airport security
- Code injection

- Code injection via input()
- OS command injection
- Lab – Command injection
- OS command injection best practices
- Avoiding command injection with the right APIs
- Lab – Command injection best practices
- Lab – Experimenting with command injection in Copilot
- Case study – Shellshock
- Lab – Shellshock
- Case study – Command injection in Ivanti security appliances
- HTML injection – Cross-site scripting (XSS)

- Cross-site scripting basics
- Cross-site scripting types

- Persistent cross-site scripting
- Reflected cross-site scripting
- Client-side (DOM-based) cross-site scripting
- Lab – Stored XSS
- Lab – Reflected XSS
- Case study – XSS to RCE in Teltonika routers
- XSS protection best practices
- Protection principles – escaping
- XSS protection APIs in Python
- XSS protection in Jinja2
- Lab – XSS fix / stored (exploring with Copilot)
- Lab – XSS fix / reflected (exploring with Copilot)
- Case study – XSS vulnerabilities in DrayTek Vigor routers
- A04 – Insecure Design

- The STRIDE model of threats
- Secure design principles of Saltzer and Schroeder

- Economy of mechanism
- Fail-safe defaults
- Complete mediation
- Open design
- Separation of privilege
- Least privilege
- Least common mechanism
- Psychological acceptability
- Client-side security

- Same Origin Policy
- Simple request
- Preflight request
- Cross-Origin Resource Sharing (CORS)
- Lab – Same-origin policy demo
- Frame sandboxing
- Cross-Frame Scripting (XFS) attacks
- Lab – Clickjacking
- Clickjacking beyond hijacking a click
- Clickjacking protection best practices
- Lab – Using CSP to prevent clickjacking (exploring with Copilot)


Day 3



The OWASP Top Ten from Copilot’s perspective




- A05 – Security Misconfiguration

- Configuration principles
- Server misconfiguration
- Python configuration best practices
- Configuring Flask
- Cookie security

- Cookie attributes
- XML entities

- DTD and the entities
- Entity expansion
- External Entity Attack (XXE)
- File inclusion with external entities
- Server-Side Request Forgery with external entities
- Lab – External entity attack
- Preventing XXE
- Lab – Prohibiting DTD
- Case study – XXE vulnerability in Ivanti products
- Lab – Experimenting with XXE in Copilot
- A06 – Vulnerable and Outdated Components

- Using vulnerable components
- Untrusted functionality import
- Malicious packages in Python
- Case study – The Polyfill.io supply chain attack
- Vulnerability management
- Lab – Finding vulnerabilities in third-party components
- Security of AI generated code
- Practical attacks against code generation tools
- Dependency hallucination via generative AI
- Case study – A history of GitHub Copilot weaknesses (up to mid 2024)
- A07 – Identification and Authentication Failures

- Authentication

- Authentication basics
- Multi-factor authentication (MFA)
- Case study – The InfinityGauntlet attack
- Time-based One Time Passwords (TOTP)
- Password management

- Inbound password management
- Storing account passwords
- Password in transit
- Lab – Is just hashing passwords enough?
- Dictionary attacks and brute forcing
- Salting
- Adaptive hash functions for password storage
- Lab – Using adaptive hash functions in Python
- Lab – Using adaptive hash functions in Copilot
- Password policy
- NIST authenticator requirements for memorized secrets
- Password database migration
- A08 – Software and Data Integrity Failures

- Integrity protection

- Message Authentication Code (MAC)
- Calculating HMAC in Python
- Lab – Calculating MAC in Python
- Digital signature

- Digital signature in Python
- Subresource integrity

- Importing JavaScript
- Lab – Importing JavaScript (exploring with Copilot)
- Case study – The British Airways data breach
- A10 – Server-side Request Forgery (SSRF)

- Server-side Request Forgery (SSRF)
- Case study – SSRF in Ivanti Connect Secure
- Wrap up

- Secure coding principles
- Principles of robust programming by Matt Bishop
- And now what?
- Software security sources and further reading
- Python resources
- Responsible AI principles in software development
- Generative AI – Resources and additional guidance</contents_plain><outline_plain>- Coding responsibly with GenAI
- The OWASP Top Ten from Copilot's perspective
- Wrap up</outline_plain><duration unit="d" days="3">3 days</duration><pricelist><price country="DE" currency="EUR">2250.00</price><price country="SI" currency="EUR">2250.00</price><price country="AT" currency="EUR">2250.00</price><price country="SE" currency="EUR">2250.00</price><price country="CH" currency="CHF">2250.00</price></pricelist><miles/></course>