<?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="36451" language="fr" source="https://portal.flane.ch/swisscom/fr/xml-course/cydrill-asip" lastchanged="2025-10-29T08:55:14+01:00" parent="https://portal.flane.ch/swisscom/fr/xml-courses"><title>API security in Python</title><productcode>ASIP</productcode><vendorcode>CY</vendorcode><vendorname>Cydrill</vendorname><fullproductcode>CY-ASIP</fullproductcode><version>1.0</version><objective>&lt;ul&gt;
&lt;li&gt;Getting familiar with essential cyber security concepts&lt;/li&gt;&lt;li&gt;Understanding API security issues&lt;/li&gt;&lt;li&gt;Detailed analysis of the OWASP API Security Top Ten elements&lt;/li&gt;&lt;li&gt;Putting API 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;Input validation approaches and principles&lt;/li&gt;&lt;/ul&gt;</objective><essentials>&lt;p&gt;General Python development&lt;/p&gt;</essentials><audience>&lt;p&gt;Python API developers&lt;/p&gt;</audience><contents>&lt;h4&gt;Day 1&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Cyber security basics
&lt;ul&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;/ul&gt;&lt;/li&gt;&lt;li&gt;OWASP API Security Top Ten
&lt;ul&gt;
&lt;li&gt;OWASP API Security Top 10 2023&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;API1 &amp;ndash; Broken Object Level Authorization
&lt;ul&gt;
&lt;li&gt;Confused deputy&lt;/li&gt;&lt;li&gt;Insecure direct object reference (IDOR)&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Insecure Direct Object Reference&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&lt;/li&gt;&lt;li&gt;File upload&lt;/li&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&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;API2 &amp;ndash; Broken 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;Passwordless solutions&lt;/li&gt;&lt;li&gt;Time-based One Time Passwords (TOTP)&lt;/li&gt;&lt;li&gt;Authentication weaknesses&lt;/li&gt;&lt;li&gt;Spoofing on the Web&lt;/li&gt;&lt;li&gt;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;Using password cracking tools&lt;/li&gt;&lt;li&gt;Password cracking in Windows&lt;/li&gt;&lt;li&gt;Password change&lt;/li&gt;&lt;li&gt;Password recovery issues&lt;/li&gt;&lt;li&gt;Password recovery best practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Password reset weakness&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Facebook account takeover via recovery code&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; GitLab account takeover&lt;/li&gt;&lt;li&gt;Anti-automation&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 hardening&lt;/li&gt;&lt;li&gt;Using passphrases&lt;/li&gt;&lt;li&gt;Password database migration&lt;/li&gt;&lt;li&gt;(Mis)handling None passwords&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Day 2&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;API3 &amp;ndash; Broken Object Property Level Authorization
&lt;ul&gt;
&lt;li&gt;Information exposure&lt;/li&gt;&lt;li&gt;Exposure through extracted data and aggregation&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Strava data exposure&lt;/li&gt;&lt;li&gt;System information leakage&lt;/li&gt;&lt;li&gt;Leaking system information&lt;/li&gt;&lt;li&gt;Information exposure best practices&lt;/li&gt;&lt;li&gt;Secrets management&lt;/li&gt;&lt;li&gt;Hard coded passwords&lt;/li&gt;&lt;li&gt;Best practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Hardcoded password&lt;/li&gt;&lt;li&gt;Protecting sensitive information in memory&lt;/li&gt;&lt;li&gt;Challenges in protecting memory&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Microsoft secret key theft via dump files&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;API4 &amp;ndash; Unrestricted Resource Consumption
&lt;ul&gt;
&lt;li&gt;Denial of service&lt;/li&gt;&lt;li&gt;Flooding&lt;/li&gt;&lt;li&gt;Resource exhaustion&lt;/li&gt;&lt;li&gt;Sustained client engagement&lt;/li&gt;&lt;li&gt;Infinite loop&lt;/li&gt;&lt;li&gt;Economic Denial of Sustainability (EDoS)&lt;/li&gt;&lt;li&gt;Algorithmic complexity issues&lt;/li&gt;&lt;li&gt;Regular expression denial of service (ReDoS)&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; ReDoS&lt;/li&gt;&lt;li&gt;Dealing with ReDoS&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; ReDoS vulnerabilities in Python&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;API5 &amp;ndash; Broken Function Level Authorization
&lt;ul&gt;
&lt;li&gt;Authorization&lt;/li&gt;&lt;li&gt;Access control basics&lt;/li&gt;&lt;li&gt;Access control types&lt;/li&gt;&lt;li&gt;Missing or improper authorization&lt;/li&gt;&lt;li&gt;Failure to restrict URL access&lt;/li&gt;&lt;li&gt;Cross-site Request Forgery (CSRF)&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Cross-site Request Forgery&lt;/li&gt;&lt;li&gt;CSRF best practices&lt;/li&gt;&lt;li&gt;CSRF defense in depth&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; CSRF protection with tokens&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;API6 &amp;ndash; Unrestricted Access to Sensitive Business Flows
&lt;ul&gt;
&lt;li&gt;Security by design&lt;/li&gt;&lt;li&gt;The STRIDE model of threats&lt;/li&gt;&lt;li&gt;Secure design principles of Saltzer and Schroeder&lt;/li&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;li&gt;Logging and monitoring&lt;/li&gt;&lt;li&gt;Logging and monitoring principles&lt;/li&gt;&lt;li&gt;Insufficient logging&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Plaintext passwords at Facebook&lt;/li&gt;&lt;li&gt;Log forging&lt;/li&gt;&lt;li&gt;Web log forging&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Log forging&lt;/li&gt;&lt;li&gt;Log forging &amp;ndash; best practices&lt;/li&gt;&lt;li&gt;Logging best practices&lt;/li&gt;&lt;li&gt;Monitoring best practices&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;API7 &amp;ndash; Server Side Request Forgery
&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;API8 &amp;ndash; Security Misconfiguration
&lt;ul&gt;
&lt;li&gt;Information exposure through error reporting&lt;/li&gt;&lt;li&gt;Information leakage via error pages&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Flask information leakage&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Information leakage via errors in Apache Superset&lt;/li&gt;&lt;li&gt;Cookie security&lt;/li&gt;&lt;li&gt;Cookie attributes&lt;/li&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;Configuring XML parsers&lt;/li&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;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Day 3&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;API9 &amp;ndash; Improper Inventory Management
&lt;ul&gt;
&lt;li&gt;Documentation blindspots&lt;/li&gt;&lt;li&gt;Dataflow blindspots&lt;/li&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;/ul&gt;&lt;/li&gt;&lt;li&gt;API10 &amp;ndash; Unsafe Consumption of APIs
&lt;ul&gt;
&lt;li&gt;Input validation&lt;/li&gt;&lt;li&gt;Input validation principles&lt;/li&gt;&lt;li&gt;Denylists and allowlists&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; Denylist failure in urllib.parse.urlparse()&lt;/li&gt;&lt;li&gt;What to validate &amp;ndash; the attack surface&lt;/li&gt;&lt;li&gt;Where to validate &amp;ndash; defense in depth&lt;/li&gt;&lt;li&gt;When to validate &amp;ndash; validation vs transformations&lt;/li&gt;&lt;li&gt;Output sanitization&lt;/li&gt;&lt;li&gt;Encoding challenges&lt;/li&gt;&lt;li&gt;Unicode challenges&lt;/li&gt;&lt;li&gt;Validation with regex&lt;/li&gt;&lt;li&gt;Injection&lt;/li&gt;&lt;li&gt;Injection principles&lt;/li&gt;&lt;li&gt;Injection attacks&lt;/li&gt;&lt;li&gt;SQL injection&lt;/li&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;/li&gt;&lt;li&gt;Content-based blind SQL injection&lt;/li&gt;&lt;li&gt;Time-based blind SQL injection&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;Database defense in depth&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; SQL injection against US airport security&lt;/li&gt;&lt;li&gt;Code injection&lt;/li&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;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;li&gt;Open redirects and forwards&lt;/li&gt;&lt;li&gt;Open redirects and forwards &amp;ndash; best practices&lt;/li&gt;&lt;li&gt;Files and streams&lt;/li&gt;&lt;li&gt;Path traversal&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Path traversal&lt;/li&gt;&lt;li&gt;Additional challenges in Windows&lt;/li&gt;&lt;li&gt;Case study &amp;ndash; File spoofing in WinRAR&lt;/li&gt;&lt;li&gt;Path traversal best practices&lt;/li&gt;&lt;li&gt;Lab &amp;ndash; Path canonicalization&lt;/li&gt;&lt;li&gt;Wrap up&lt;/li&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;Secure design principles of Saltzer and Schroeder&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;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</contents><outline>&lt;ul&gt;
&lt;li&gt;Cyber security basics&lt;/li&gt;&lt;li&gt;OWASP API Security Top Ten&lt;/li&gt;&lt;li&gt;API1 - Broken Object Level Authorization&lt;/li&gt;&lt;li&gt;API2 - Broken Authentication&lt;/li&gt;&lt;li&gt;API3 - Broken Object Property Level Authorization&lt;/li&gt;&lt;li&gt;API4 - Unrestricted Resource Consumption&lt;/li&gt;&lt;li&gt;API5 - Broken Function Level Authorization&lt;/li&gt;&lt;li&gt;API6 - Unrestricted Access to Sensitive Business Flows&lt;/li&gt;&lt;li&gt;API7 - Server Side Request Forgery&lt;/li&gt;&lt;li&gt;API8 - Security Misconfiguration&lt;/li&gt;&lt;li&gt;API9 - Improper Inventory Management&lt;/li&gt;&lt;li&gt;API10 - Unsafe Consumption of APIs&lt;/li&gt;&lt;li&gt;Wrap up&lt;/li&gt;&lt;/ul&gt;</outline><objective_plain>- Getting familiar with essential cyber security concepts
- Understanding API security issues
- Detailed analysis of the OWASP API Security Top Ten elements
- Putting API security in the context of Python
- Going beyond the low hanging fruits
- Managing vulnerabilities in third party components
- Input validation approaches and principles</objective_plain><essentials_plain>General Python development</essentials_plain><audience_plain>Python API developers</audience_plain><contents_plain>Day 1


- Cyber security basics

- What is security?
- Threat and risk
- Cyber security threat types – the CIA triad
- Consequences of insecure software
- OWASP API Security Top Ten

- OWASP API Security Top 10 2023
- API1 – Broken Object Level Authorization

- Confused deputy
- Insecure direct object reference (IDOR)
- Lab – Insecure Direct Object Reference
- Authorization bypass through user-controlled keys
- Case study – Remote takeover of Nexx garage doors and alarms
- Lab – Horizontal authorization
- File upload
- Unrestricted file upload
- Good practices
- Lab – Unrestricted file upload
- API2 – Broken Authentication

- Authentication basics
- Multi-factor authentication (MFA)
- Case study – The InfinityGauntlet attack
- Passwordless solutions
- Time-based One Time Passwords (TOTP)
- Authentication weaknesses
- Spoofing on the Web
- 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
- Using password cracking tools
- Password cracking in Windows
- Password change
- Password recovery issues
- Password recovery best practices
- Lab – Password reset weakness
- Case study – Facebook account takeover via recovery code
- Case study – GitLab account takeover
- Anti-automation
- Password policy
- NIST authenticator requirements for memorized secrets
- Password hardening
- Using passphrases
- Password database migration
- (Mis)handling None passwords
Day 2


- API3 – Broken Object Property Level Authorization

- Information exposure
- Exposure through extracted data and aggregation
- Case study – Strava data exposure
- System information leakage
- Leaking system information
- Information exposure best practices
- Secrets management
- Hard coded passwords
- Best practices
- Lab – Hardcoded password
- Protecting sensitive information in memory
- Challenges in protecting memory
- Case study – Microsoft secret key theft via dump files
- API4 – Unrestricted Resource Consumption

- Denial of service
- Flooding
- Resource exhaustion
- Sustained client engagement
- Infinite loop
- Economic Denial of Sustainability (EDoS)
- Algorithmic complexity issues
- Regular expression denial of service (ReDoS)
- Lab – ReDoS
- Dealing with ReDoS
- Case study – ReDoS vulnerabilities in Python
- API5 – Broken Function Level Authorization

- Authorization
- Access control basics
- Access control types
- Missing or improper authorization
- Failure to restrict URL access
- Cross-site Request Forgery (CSRF)
- Lab – Cross-site Request Forgery
- CSRF best practices
- CSRF defense in depth
- Lab – CSRF protection with tokens
- API6 – Unrestricted Access to Sensitive Business Flows

- Security by 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
- Logging and monitoring
- Logging and monitoring principles
- Insufficient logging
- Case study – Plaintext passwords at Facebook
- Log forging
- Web log forging
- Lab – Log forging
- Log forging – best practices
- Logging best practices
- Monitoring best practices
- API7 – Server Side Request Forgery

- Server-side Request Forgery (SSRF)
- Case study – SSRF in Ivanti Connect Secure
- API8 – Security Misconfiguration

- Information exposure through error reporting
- Information leakage via error pages
- Lab – Flask information leakage
- Case study – Information leakage via errors in Apache Superset
- Cookie security
- Cookie attributes
- Same Origin Policy
- Simple request
- Preflight request
- Cross-Origin Resource Sharing (CORS)
- Lab – Same-origin policy demo
- Configuring XML parsers
- 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
Day 3


- API9 – Improper Inventory Management

- Documentation blindspots
- Dataflow blindspots
- 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
- API10 – Unsafe Consumption of APIs

- Input validation
- Input validation principles
- Denylists and allowlists
- Case study – Denylist failure in urllib.parse.urlparse()
- What to validate – the attack surface
- Where to validate – defense in depth
- When to validate – validation vs transformations
- Output sanitization
- Encoding challenges
- Unicode challenges
- Validation with regex
- 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
- 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
- Case study – Shellshock
- Lab – Shellshock
- Case study – Command injection in Ivanti security appliances
- Open redirects and forwards
- Open redirects and forwards – best practices
- Files and streams
- Path traversal
- Lab – Path traversal
- Additional challenges in Windows
- Case study – File spoofing in WinRAR
- Path traversal best practices
- Lab – Path canonicalization
- Wrap up
- Secure coding principles
- Principles of robust programming by Matt Bishop
- Secure design principles of Saltzer and Schroeder
- And now what?
- Software security sources and further reading
- Python resources</contents_plain><outline_plain>- Cyber security basics
- OWASP API Security Top Ten
- API1 - Broken Object Level Authorization
- API2 - Broken Authentication
- API3 - Broken Object Property Level Authorization
- API4 - Unrestricted Resource Consumption
- API5 - Broken Function Level Authorization
- API6 - Unrestricted Access to Sensitive Business Flows
- API7 - Server Side Request Forgery
- API8 - Security Misconfiguration
- API9 - Improper Inventory Management
- API10 - Unsafe Consumption of APIs
- Wrap up</outline_plain><duration unit="d" days="3">3 jours</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>