Lessons Learned
Start course

This course is the second course in our series covering domain 4 of the CSSLP certification and explores defensive coding practices and how they can help secure your software.

Learning Objectives

  • Understand the foundations of defensive coding practices
  • Learn about the primary threat mitigations that can be employed
  • Understanding how we can learn from our mistakes in the context of software security

Intended Audience

This course is intended for anyone looking to develop secure software as well as those studying for the CSSLP certification.


Any experience relating to information security would be advantageous, but not essential. All topics discussed are thoroughly explained and presented in a way allowing the information to be absorbed by everyone, regardless of experience within the security field.


Now, painful as it seems, lessons learned are very valuable. Making mistakes, of course, we hope for in the test environment with the ability to fix them before harm is caused through the production world. We find then, that few things teach us as well as experience, painful, though it might be. Ideally, failures and mistakes, as I said, should occur in the lab and during testing so that they don't occur in production. But this, of course, is not always realistic. There may be too many variables, too many varying conditions to reproduce all of them or even most of them.

Now there is an old saying, a cat can be caught in any trap once. And what that really refers to is that making mistakes is generally unavoidable. It is the repetition of the same mistake that leads to security issues, legal troubles, loss of business, and reputation. And once it is learned what that trap the cat was caught in, is like, and how it functions, it should be relatively straightforward to avoid it in the future. This leads to the conclusion that the cycle must change from repetitive remediation, which produces all of the above consequences, to evolving improvement, which produces improved software quality, reliability, performance, and a fuller integration of security with the program goals and operations, again, on balance, as it should be with performance.

So this is the end of section two. We'll stop here, and then we'll pick up and move into our third and final section of domain four, entitled Secure Coding Operations.

About the Author
Learning Paths

Mr. Leo has been in Information System for 38 years, and an Information Security professional for over 36 years.  He has worked internationally as a Systems Analyst/Engineer, and as a Security and Privacy Consultant.  His past employers include IBM, St. Luke’s Episcopal Hospital, Computer Sciences Corporation, and Rockwell International.  A NASA contractor for 22 years, from 1998 to 2002 he was Director of Security Engineering and Chief Security Architect for Mission Control at the Johnson Space Center.  From 2002 to 2006 Mr. Leo was the Director of Information Systems, and Chief Information Security Officer for the Managed Care Division of the University of Texas Medical Branch in Galveston, Texas.


Upon attaining his CISSP license in 1997, Mr. Leo joined ISC2 (a professional role) as Chairman of the Curriculum Development Committee, and served in this role until 2004.   During this time, he formulated and directed the effort that produced what became and remains the standard curriculum used to train CISSP candidates worldwide.  He has maintained his professional standards as a professional educator and has since trained and certified nearly 8500 CISSP candidates since 1998, and nearly 2500 in HIPAA compliance certification since 2004.  Mr. leo is an ISC2 Certified Instructor.