Categories: Security

Filtering user input in web applications: the basics

SQL Injection. Cross-Site Scripting. These are just two of web application security flaws that can be prevented by effectively filtering user input. Web developers can filter user-supplied input in two ways – either by utilizing white-list or black-list input validation. Each method of input sanitization has their own pros and cons, so I will go through each of them individually.

Black-list input sanitization

Black-list input validation is one of the most common ways user-supplied input can be validated. The way black-list input sanitization works is pretty simple: when a list of disallowed values is created and any of those values appear in a request, the request gets blocked. However, the issue with validating user-supplied input in such a way is that web developers, especially those who are not very keen in the field of web security, are very likely to block only one or very few attack vectors which means that potential attacker would have very many options to choose from when crafting his payload. Nonetheless, there is another option – white-list input validation.

White-list input sanitization

White-list input validation is very similar to black-list input validation in that it also uses values to understand which requests should be blocked, but it works in an opposite way – when using white-list input sanitization, developers provide a list of allowed values as opposed to providing only disallowed values. In most cases, white-list input sanitization is much more effective than black-list input sanitization, but in some cases, it might be very difficult to create an effective white-list filter because white-list input validation is only very effective when all good values are known.

Sanitizing input in PHP

Here’s some functions that can be useful when sanitizing input in PHP:

  • htmlspecialchars() or htmlentities() – protects against Cross-Site Scripting attacks by converting characters to HTML entities. It is worth noting that htmlspecialchars() only converts special characters while htmlentities() converts all of the applicable characters;
  • FILTER_SANITIZE_STRING – removes tags from a string (used with the filter_var() function);
  • FILTER_VALIDATE_EMAIL – checks if an email address is valid (used with the filter_var() function);
  • FILTER_SANITIZE_EMAIL – removes all illegal characters from an email address (used with the filter_var() function);
  • FILTER_SANITIZE_URL – removes all illegal characters from a given URL;
  • FILTER_SANITIZE_SPECIAL_CHARS – HTML-encodes special characters;
  • (int) $_GET / $_POST – allows developers to make sure a given parameter is an integer. FILTER_VALIDATE_INT or is_numeric() can also be used;
  • mysql_real_escape_string() – escapes any special characters that are used within a query;
  • strip_tags() – strips HTML and PHP tags from a string;
  • PHP Data Objects (PDO) – while PDO is not a function, it is one of the best ways to protect against SQL Injection attacks by using prepared statements.
Colors

Share
Published by
Colors
Tags: Security

Recent Posts

Messed Up at a Conference? You‘re Not Alone – Lessons for Speakers in Remote Conferences

This blog will walk you through some lessons for conference speakers who speak remotely no…

2 months ago

OWASP Mobile Top 10 Part 2: Insecure Data Storage

Insecure data storage is the second vulnerability in the OWASP Mobile Top 10 list. Insecure…

3 years ago

OWASP Mobile Top 10 Part 1: Improper Platform Usage

The improper platform usage vulnerability is the first vulnerability in the OWASP Mobile Top 10.…

4 years ago

What is the OWASP Mobile Top 10?

If you ever heard of web application security, you probably heard of OWASP. And if…

4 years ago

The Basics of MySQL Security

If you have ever built a website, chances are you took care of security. Securing…

4 years ago

Build Stuff 2019 Retrospective

It's November. For some developers it's just an ordinary month - for some of them…

5 years ago