DEV Community

Cover image for Prevent SSRF in Laravel: Guide & Example Code
Pentest Testing Corp
Pentest Testing Corp

Posted on

Prevent SSRF in Laravel: Guide & Example Code

Understanding Server-Side Request Forgery (SSRF) in Laravel

Server-Side Request Forgery (SSRF) is a critical security vulnerability where an attacker tricks a server into making requests on its behalf. This flaw can lead to unauthorized access to internal systems, data breaches, and other severe impacts. For developers using Laravel, it's essential to understand and mitigate SSRF risks effectively.

In this blog post, we will:

  1. Explain how SSRF works.
  2. Share a real-world example of SSRF in Laravel.
  3. Provide a coding solution to secure your application.

Prevent SSRF in Laravel: Guide & Example Code


What Is SSRF and Why Does It Matter?

SSRF allows attackers to manipulate server requests by exploiting functionality designed to fetch resources. These manipulated requests can target internal or external resources, potentially exposing sensitive data.

Example Use Case:

Imagine an application that fetches external content based on a user-provided URL. If not validated correctly, attackers can input malicious URLs to interact with internal services.


SSRF Exploitation in Laravel: Example Scenario

Suppose your Laravel app includes a feature where users can fetch profile photos via an external URL. Without proper validation, this endpoint becomes vulnerable to SSRF.

Vulnerable Code Example:

<?php
use Illuminate\Http\Request;

public function fetchImage(Request $request)
{
    $url = $request->input('image_url');  
    $image = file_get_contents($url); // Vulnerable code
    return response()->stream($image);
}
?>
Enter fullscreen mode Exit fullscreen mode

This code lacks validation for the provided URL, allowing attackers to exploit it by passing malicious inputs.


How to Secure Against SSRF in Laravel

To mitigate SSRF risks, consider these best practices:

  1. Input Validation: Only allow specific domains or IP ranges.
  2. Use a URL Parser: Validate and sanitize URLs before processing.
  3. Restrict Internal Requests: Block access to internal resources like localhost or private IP ranges.

Secure Code Example:

<?php
use Illuminate\Http\Request;

public function fetchImage(Request $request)
{
    $url = $request->input('image_url');

    // Validate URL
    if (!filter_var($url, FILTER_VALIDATE_URL)) {
        return response()->json(['error' => 'Invalid URL'], 400);
    }

    // Allow only specific domains
    $allowedDomains = ['example.com', 'trustedsource.org'];
    $host = parse_url($url, PHP_URL_HOST);

    if (!in_array($host, $allowedDomains)) {
        return response()->json(['error' => 'Domain not allowed'], 403);
    }

    try {
        $image = file_get_contents($url);
        return response()->stream($image);
    } catch (Exception $e) {
        return response()->json(['error' => 'Unable to fetch image'], 500);
    }
}
?>
Enter fullscreen mode Exit fullscreen mode

Real-Time Website Security Check

You can use our free Website Security Scanner Tool to identify potential vulnerabilities like SSRF in your website. Below is an example of a vulnerability assessment report generated by the tool:

Screenshot of the homepage of our free Website Security Checker tool.Screenshot of the homepage of our free Website Security Checker tool.


A sample vulnerability assessment report showcasing the risks detected by the tool.A sample vulnerability assessment report showcasing the risks detected by the tool.


Why SSRF Prevention Matters

Securing your Laravel application from SSRF is critical for protecting your users and maintaining trust. Additionally, leveraging tools like our free Website Security Checker can help identify and resolve vulnerabilities effectively.


Conclusion

SSRF is a growing threat that demands proactive measures. By validating inputs, restricting requests, and using tools like ours to test website security free, you can secure your Laravel app against this vulnerability.

Take the first step by running a free vulnerability assessment on your website today!

Top comments (0)