SKIP THE SHIPPING
Use code NOSHIP during checkout to save 40% on eligible eBooks, now through January 5. Shop now.
Register your product to gain access to bonus material or receive a coupon.
This PDF will be accessible from your Account page after purchase and requires PDF reading software, such as Acrobat® Reader®.
The eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
This is the eBook version of the printed book. If the print book includes a CD-ROM, this content is not included within the eBook version.
Easy, Powerful Code Security Techniques for Every PHP Developer
Hackers specifically target PHP Web applications. Why? Because they know many of these apps are written by programmers with little or no experience or training in software security. Don’t be victimized. Securing PHP Web Applications will help you master the specific techniques, skills, and best practices you need to write rock-solid PHP code and harden the PHP software you’re already using.
Drawing on more than fifteen years of experience in Web development, security, and training, Tricia and William Ballad show how security flaws can find their way into PHP code, and they identify the most common security mistakes made by PHP developers. The authors present practical, specific solutions–techniques that are surprisingly easy to understand and use, no matter what level of PHP programming expertise you have.
Securing PHP Web Applications covers the most important aspects of PHP code security, from error handling and buffer overflows to input validation and filesystem access. The authors explode the myths that discourage PHP programmers from attempting to secure their code and teach you how to instinctively write more secure code without compromising your software’s performance or your own productivity.
Coverage includes
Tricia and William Ballad demystify PHP security by presenting realistic scenarios and code examples, practical checklists, detailed visuals, and more. Whether you write Web applications professionally or casually, or simply use someone else’s PHP scripts, you need this book–and you need it now, before the hackers find you!
Acknowledgments xiii
About the Authors xv
Part I: Web Development Is a Blood Sport–Don't Wander onto the Field Without a Helmet 1
Chapter 1: Security Is a Server Issue and Other Myths 3
Reality Check 3
Security Is a Server Issue 5
Security Through Obscurity 7
Native Session Management Provides Plenty of Security 9
“My Application Isn’t Major Enough to Get Hacked” 9
The “Barbarians at the Gate” Syndrome 10
Wrapping It Up 10
Part II: Is That Hole Really Big Enough to Drive a Truck Through? 11
Chapter 2: Error Handling 13
The Guestbook Application 13
Users Do the Darnedest Things . . . 15
Building an Error-Handling Mechanism 19
Wrapping It Up 26
Chapter 3: System Calls 27
Navigating the Dangerous Waters of exec(), system(), and Backticks 27
Using escapeshellcmd() and escapeshellarg() to Secure System Calls 30
Create an API to Handle All System Calls 31
Patch the Guestbook Application 32
Wrapping It Up 34
Part III: What's In a Name? More Than You Expect 35
Chapter 4: Buffer Overflows and Variable Sanitation 37
What Is a Buffer, How Does It Overflow, and Why Should You Care? 37
Prevent Buffer Overflows by Sanitizing Variables 46
Patch the Application 49
Wrapping It Up 52
Chapter 5: Input Validation 53
New Feature: Allow Users to Sign Their Guestbook Comments 53
The Problem: Users Who Give You More Than You Asked For 54
Assumptions: You Know What Your Data Looks Like 55
The Solution: Regular Expressions to Validate Input 57
Wrapping It Up 67
Chapter 6: Filesystem Access: Accessing the Filesystem for Fun and Profit 69
Opening Files 69
Creating and Storing Files 73
Changing File Properties Safely 76
Patching the Application to Allow User-Uploaded Image Files 88
Wrapping It Up 90
Part IV: “Aw come on man, you can trust me” 93
Chapter 7: Authentication 95
What Is User Authentication? 95
Privileges 100
How to Authenticate Users 101
Storing Usernames and Passwords 115
Patching the Application to Authenticate Users 117
Wrapping It Up 120
Chapter 8: Encryption 121
What Is Encryption? 121
Choosing an Encryption Type 123
Password Security 125
Patching the Application to Encrypt Passwords 125
Wrapping It Up 128
Chapter 9: Session Security 129
What Is a Session Variable? 129
Major Types of Session Attacks 129
Patching the Application to Secure the Session 133
Wrapping It Up 136
Chapter 10: Cross-Site Scripting 137
What Is XSS? 137
Reflected XSS 137
Stored XSS 138
Patching the Application to Prevent XSS Attacks 138
Wrapping It Up 139
Part V: Locking Up for the Night 141
Chapter 11: Securing Apache and MySQL 143
Programming Languages, Web Servers, and Operating Systems Are Inherently Insecure 143
Securing a UNIX, Linux, or Mac OS X Environment 144
Securing Apache 147
Securing MySQL 159
Wrapping It Up 166
Chapter 12: Securing IIS and SQL Server 167
Securing a Windows Server Environment 167
Securing IIS 177
Securing SQL Server 187
Wrapping It Up 205
Chapter 13: Securing PHP on the Server 207
Using the Latest Version of PHP 207
Using the Security Features Built into PHP and Apache 213
Using ModSecurity 215
Hardening php.ini 216
Wrapping It Up 218
Chapter 14: Introduction to Automated Testing 219
Why Are We Talking About Testing in a Security Book? 219
Testing Framework 220
Types of Tests 222
Choosing Solid Test Data 223
Wrapping It Up 224
Chapter 15: Introduction to Exploit Testing 225
What Is Exploit Testing? 225
Fuzzing 226
Testing Toolkits 233
Proprietary Test Suites 246
Wrapping It Up 254
Part VI: “Don’t Get Hacked” Is Not a Viable Security Policy 255
Chapter 16: Plan A: Designing a Secure Application from the Beginning 257
Before You Sit Down at the Keyboard . . . 257
Identifying Points of Failure 269
Wrapping It Up 271
Chapter 17: Plan B: Plugging the Holes in Your Existing Application 273
Set Up Your Environment 273
Application Hardening Checklist 276
Wrapping It Up 278
Epilogue: Security Is a Lifestyle Choice: Becoming a Better Programmer 279
Avoid Feature Creep 279
Write Self-Documenting Code 280
Use the Right Tools for the Job 282
Have Your Code Peer-Reviewed 283
Wrapping It Up 284
Appendix: Additional Resources 285
PEAR 285
Books 286
Web Sites 287
Tools 288
Glossary 289
Index 293