We may earn an affiliate commission when you visit our partners.
Course image
Matthew Bishop, PhD

This course introduces you to the principles of secure programming. It begins by discussing the philosophy and principles of secure programming, and then presenting robust programming and the relationship between it and secure programming. We'll go through a detailed example of writing robust code and we'll see many common programming problems and show their connection to writing robust, secure programs in general. We’ll examine eight design principles that govern secure coding and how to apply them to your own work. We’ll discuss how poor design choices drive implementation in coding. We’ll differentiate between informal, formal, and ad hoc coding methods. Throughout, methods for improving the security and robustness of your programs will be emphasized and you will have an opportunity to practice these concepts through various lab activities. A knowledge of the C programming language is helpful, but not required to participate in the lab exercises.

Enroll now

What's inside

Syllabus

Secure Programming Philosophy
In this module, you'll be able to describe key concepts in secure programming including typical problems and procedures. You'll be able to differentiate between robust programming and secure programming and you'll generalize from philosophies of "what to watch out for" and "where to look" to specific situations.
Read more
Secure Programming Design Principles
In this module, you will be able to recall eight software design principles that govern secure programming. You will write a short program, in any language you like, to determine whether the system enforces the Principle of Complete Mediation. You'll be able to apply design principles from Saltzer, Schroeder and Kaashoek to code situations.
Robust Programming
In this module, you will be able to explain the issues that can arise from fragile programming. You'll be able to discuss how design issues drive implementation and be able to distinguish between robust and fragile code. You'll be able to explain what can go wrong in fragile code and be able to write a robust version of fragile code.
Methods for Robustness
In this module, you will be able to describe how to use techniques that mimic formal methods to improve the robustness and security of programs. You will also be able to compare and contrast formal, informal, and ad hoc programming methods. You'll be able to write a program to demonstrate how a poorly-written program or library can cause incorrect results.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Develops design principles governing secure programming and applies them to code, strengthening coding practices
Taught by Matthew Bishop, PhD, a leading expert in cybersecurity
Provides hands-on lab exercises to practice and reinforce concepts
Builds a strong foundation in secure programming principles, making it suitable for beginners and intermediate learners alike
Covers a comprehensive range of topics, from robust programming to secure design principles
Requires some knowledge of the C programming language for lab exercises

Save this course

Save Principles of Secure Coding to your list so you can find it easily later:
Save

Reviews summary

Secure coding foundations

Learners say that this course provides good to excellent foundational knowledge of the principles of secure coding. Concepts are well explained with helpful examples. Assessments include both quizzes and exercises. Some students mention that the course leans towards a C-centric focus and assumes some background in C, which may confuse beginners. The instructors are well regarded. Overall, learners find this course to be a valuable introduction to secure coding.
Code examples are useful for illustrating concepts.
"Course content is really good, well explained."
"It's very good start to understand Software Security"
"I found it to be an excellent course.Very good, congratulations."
Course may assume some prior knowledge of C and UNIX.
"The material itself was a bit C-centric and UNIX-centric, and assumed a lot of background knowledge about C and operating system design."
"I can imagine some students (especially those that don't know C or UNIX administration) being quite confused and frustrated."
Course has heavy focus on C programming, which may not suit all learners.
"We're now programming in the 2020s, not 1990s. Please update."
"This course focuses mainly on a few code examples in C, which are explained."
"A​n okay addition to Programming 201. Worth listening through. However, there are 2 things that really annoyed me: * Too much focus on C implementation of an example library and, as a result, too much focus on C-related problems and workarounds."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Principles of Secure Coding with these activities:
Attend Industry Events
Attending industry events can expose you to the latest secure programming trends and best practices.
Browse courses on Networking
Show steps
  • Research and identify relevant security conferences or meetups.
  • Attend the events and engage in discussions with experts and professionals.
Understand Secure Programming Principles
Reviewing the core principles of secure programming will help you write more secure and robust software in this course.
Show steps
  • Read the book to understand the concepts behind secure programming.
  • Identify the key principles of secure programming.
  • Examine how these principles relate to software design and implementation.
Apply Secure Design Principles in Practice
Guided tutorials can help you apply secure design principles to your own coding projects.
Show steps
  • Find tutorials on secure coding best practices.
  • Follow the tutorials to learn how to implement secure design principles.
  • Apply the principles to your own code.
Five other activities
Expand to see all activities and additional details
Show all eight activities
Secure Password Storage System
Developing a password storage system will deepen your grasp of secure programming.
Browse courses on Data Security
Show steps
  • Design a secure password storage system.
  • Implement the system using a secure programming language and techniques.
  • Test the system to ensure its security.
Participate in a Coding Contest
Participating in coding contests can challenge your secure programming skills and expose you to different approaches.
Browse courses on Competitive Programming
Show steps
  • Find and register for a coding contest that focuses on secure programming.
  • Practice and prepare for the contest.
  • Participate in the contest and try to solve the problems.
Test Your Debugging Skills
Analyzing real-world code can help you identify and resolve potential security issues.
Browse courses on Debugging
Show steps
  • Find coding problems or challenges online.
  • Attempt to solve the problems or challenges.
  • Analyze the solutions to identify potential security issues.
Demonstrate a Robust and Secure Code
Build a project that demonstrates your understanding of robust and secure programming techniques.
Browse courses on Secure Programming
Show steps
  • Identify a secure development lifecycle (SDL).
  • Design and implement a software application using the chosen SDL.
  • Test and evaluate the application to ensure its robustness and security.
  • Document the project and its implications for secure software development.
Share Your Secure Programming Knowledge
Mentoring others in secure programming will reinforce your understanding of the subject and help others.
Browse courses on Secure Programming
Show steps
  • Identify opportunities to mentor others on secure programming.
  • Share your knowledge and experience to help mentees improve their secure programming skills.

Career center

Learners who complete Principles of Secure Coding will develop knowledge and skills that may be useful to these careers:
Application Security Engineer
As an Application Security Engineer, you will work in a trusted security role to make sure software applications are secure during design, development, deployment, and maintenance. The Principles of Secure Coding course can help you gain the skills needed to succeed in this role by ensuring that you are writing secure applications, right from the start.
Penetration Tester
Penetration Testers, also known as ethical hackers, use their skills to try to breach an organization's network to identify vulnerabilities that a malicious actor could exploit. This course will teach you about the design principles of secure coding, which can help you in your work as a Penetration Tester. The insight you gain on writing secure programs will give you the advantage of thinking like a person who would want to breach an organization's network.
Cybersecurity Architect
Cybersecurity Architects design and implement security solutions for organizations. They work with stakeholders to understand the organization's security needs and develop and implement solutions to meet those needs. This course will give you the knowledge and skills you need to succeed as a Cybersecurity Architect, including understanding of the design principles of secure coding.
Security Consultant
Security Consultants work with organizations to improve their security posture. They assess risks, identify vulnerabilities, and develop and implement security plans. They also provide training and awareness to employees on security best practices. This course will give you the knowledge and skills you need to succeed as a Security Consultant, including understanding the design principles of secure coding.
Security Analyst
Security Analysts monitor and analyze security data to identify threats and vulnerabilities. They also develop and implement security measures to protect an organization's information systems. This course will give you the knowledge and skills you need to succeed as a Security Analyst, including understanding of the design principles of secure coding.
Information Security Analyst
Information Security Analysts plan and carry out security measures to protect an organization's computer networks and systems. They also respond to security breaches and incidents and make sure the organization complies with security laws and regulations. The Principles of Secure Coding course will give you the hands-on experience writing robust and secure programs, which is a critical skill in this field.
Systems Administrator
Systems Administrators are responsible for the day-to-day operations of computer systems. They install, configure, and maintain hardware and software, and they monitor systems for security breaches and other problems. This course will help you in this role by providing you with the skills to write robust and secure code. This will help you to keep systems running smoothly and securely.
Malware Analyst
Malware Analysts investigate and analyze malware to understand how it works and how to protect against it. They also develop and implement countermeasures to protect systems from malware. This course will help you in this role by providing you with the skills to write robust and secure code. This will help you to understand how malware works and how to develop countermeasures to protect against it.
Chief Information Security Officer (CISO)
CISOs are responsible for the overall security of an organization's information systems. They develop and implement security policies, procedures, and standards, and they oversee the organization's security program. This course will give you the knowledge and skills you need to succeed as a CISO, including understanding of the design principles of secure coding.
Software Architect
Software Architects are responsible for the overall design and architecture of software applications. They work with stakeholders to define requirements, develop technical designs, and ensure that the software is built to meet the needs of the business. Taking the Principles of Secure Coding course will help you in this role by providing you with the skills to design and implement secure software applications.
Information Technology Auditor
Information Technology Auditors assess the security of computer systems and networks. They identify vulnerabilities and recommend ways to improve security. This course will help you in this role by providing you with the skills to write robust and secure code. This will help you to identify vulnerabilities and make recommendations for improvement.
Network Engineer
Network Engineers design, implement, and maintain computer networks. They work with hardware and software to ensure that networks are secure and reliable. This course will help you in this role by providing you with the skills to write robust and secure code. This will help you to design and implement more secure networks.
Software Developer
Software Developers design, develop, and test software applications. They work with stakeholders to understand requirements, develop code, and ensure that the software meets the needs of the business. This course will teach you the principles of secure coding, which will help you write more secure applications. This course can give you a competitive advantage by setting you up for success and longevity in the field.
Security Engineer
Security Engineers typically conduct risk assessments to identify vulnerabilities in hardware and software systems, create and implement security policies, and test security controls for effectiveness. Furthermore, they are responsible for keeping up-to-date on the latest security trends and threats to take preventative measures. This course may help prepare you for a career in Security Engineering by giving you the foundational knowledge of writing secure code. It can also provide you with the skills needed to conduct risk assessments and create effective security policies and test controls.
Technical Writer
Technical Writers create documentation for software and hardware products. They work with engineers and other technical staff to understand the product and then write clear and concise documentation for users. If you are interested in a career as a Technical Writer, this course may be helpful as it will give you the opportunity to learn about the principles of secure coding. This knowledge will help you to write more accurate and informative documentation for software products.

Reading list

We've selected 13 books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Principles of Secure Coding.
Provides a comprehensive overview of the principles and practices of secure coding. It covers a wide range of topics, including software design, implementation, and testing. It valuable resource for anyone who wants to learn more about secure coding.
Practical guide to writing secure code. It covers a wide range of topics, including secure coding techniques, threat modeling, and code review. It valuable resource for anyone who wants to learn how to write more secure code.
Comprehensive guide to secure coding in C. It covers a wide range of topics, including secure coding techniques, threat modeling, and code review. It valuable resource for anyone who wants to learn how to write more secure code in C.
Comprehensive guide to securing modern web applications. It covers a wide range of topics, including web application security threats, secure coding techniques, and web application security testing. It valuable resource for anyone who wants to learn more about web application security.
Hands-on guide to software security. It covers a wide range of topics, including secure coding techniques, threat modeling, and vulnerability analysis. It valuable resource for anyone who wants to learn more about software security.
Practical guide to web application hacking. It covers a wide range of topics, including web application security threats, vulnerability assessment, and penetration testing. It valuable resource for anyone who wants to learn more about web application hacking.
Comprehensive guide to secure coding in C and C++. It covers a wide range of topics, including secure coding techniques, threat modeling, and code review. It valuable resource for anyone who wants to learn how to write more secure code in C and C++.
Comprehensive overview of computer security. It covers a wide range of topics, including computer security threats, security controls, and cryptography. It valuable resource for anyone who wants to learn more about computer security.
Comprehensive overview of network security. It covers a wide range of topics, including network security threats, security controls, and cryptography. It valuable resource for anyone who wants to learn more about network security.
Popular science book about cryptography. It covers a wide range of topics, including the history of cryptography, different types of cryptography, and the future of cryptography. It valuable resource for anyone who wants to learn more about cryptography in a non-technical way.
Memoir by Clifford Stoll, a computer security expert who tracked down a Soviet spy in the 1980s. It fascinating read that provides a glimpse into the world of computer security and espionage.
Business book that discusses the challenges that large companies face in innovating. It valuable read for anyone who is interested in the future of technology and business.
Business book that provides a framework for building successful startups. It valuable read for anyone who is interested in starting a business or learning more about entrepreneurship.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Principles of Secure Coding.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser