㊙️ AntiXSS | Protection against Cross-site scripting (XSS) via PHP

Overview

Build Status codecov.io Codacy Badge Latest Stable Version Total Downloads License Donate to this project using Paypal Donate to this project using Patreon

㊙️ AntiXSS

"Cross-site scripting (XSS) is a type of computer security vulnerability typically found in Web applications. XSS enables attackers to inject client-side script into Web pages viewed by other users. A cross-site scripting vulnerability may be used by attackers to bypass access controls such as the same origin policy. Cross-site scripting carried out on websites accounted for roughly 84% of all security vulnerabilities documented by Symantec as of 2007." - http://en.wikipedia.org/wiki/Cross-site_scripting

DEMO:

http://anti-xss-demo.suckup.de/

NOTES:

  1. Use filter_input() - don't use GLOBAL-Array (e.g. $_SESSION, $_GET, $_POST, $_SERVER) directly

  2. Use html-sanitizer or HTML Purifier if you need a more configurable solution

  3. Add "Content Security Policy's" -> Introduction to Content Security Policy

  4. DO NOT WRITE YOUR OWN REGEX TO PARSE HTML!

  5. READ THIS TEXT -> XSS (Cross Site Scripting) Prevention Cheat Sheet

  6. TEST THIS TOOL -> Zed Attack Proxy (ZAP)

Install via "composer require"

composer require voku/anti-xss

Usage:

use voku\helper\AntiXSS;

require_once __DIR__ . '/vendor/autoload.php'; // example path

$antiXss = new AntiXSS();

Example 1: (HTML Character)

$harm_string = "Hello, i try to <script>alert('Hack');</script> your site";
$harmless_string = $antiXss->xss_clean($harm_string);

// Hello, i try to alert&#40;'Hack'&#41;; your site

Example 2: (Hexadecimal HTML Character)

$harm_string = "<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>";
$harmless_string = $antiXss->xss_clean($harm_string);
    
// <IMG >

Example 3: (Unicode Hex Character)

$harm_string = "<a href='&#x2000;javascript:alert(1)'>CLICK</a>";
$harmless_string = $antiXss->xss_clean($harm_string);
    
// <a >CLICK</a>

Example 4: (Unicode Character)

$harm_string = "<a href=\"\u0001java\u0003script:alert(1)\">CLICK<a>";
$harmless_string = $antiXss->xss_clean($harm_string);
    
// <a >CLICK</a>

Example 5.1: (non Inline CSS)

$harm_string = '<li style="list-style-image: url(javascript:alert(0))">';
$harmless_string = $antiXss->xss_clean($harm_string);

// <li >

Example 5.2: (with Inline CSS)

$harm_string = '<li style="list-style-image: url(javascript:alert(0))">';
$antiXss->removeEvilAttributes(array('style')); // allow style-attributes
$harmless_string = $antiXss->xss_clean($harm_string);

// <li style="list-style-image: url(alert&#40;0&#41;)">

Example 6: (check if an string contains a XSS attack)

$harm_string = "\x3cscript src=http://www.example.com/malicious-code.js\x3e\x3c/script\x3e";
$harmless_string = $antiXss->xss_clean($harm_string);

// 

$antiXss->isXssFound(); 

// true

Example 7: (allow e.g. iframes)

$harm_string = "<iframe width="560" onclick="alert('xss')" height="315" src="https://www.youtube.com/embed/foobar?rel=0&controls=0&showinfo=0" frameborder="0" allowfullscreen></iframe>";

$antiXss->removeEvilHtmlTags(array('iframe'));

$harmless_string = $antiXss->xss_clean($harm_string);

// <iframe width="560"  height="315" src="https://www.youtube.com/embed/foobar?rel=0&controls=0&showinfo=0" frameborder="0" allowfullscreen></iframe>

Unit Test:

  1. Composer is a prerequisite for running the tests.
composer install
  1. The tests can be executed by running this command from the root directory:
./vendor/bin/phpunit

AntiXss methods

addEvilAttributes addEvilHtmlTags addNeverAllowedOnEventsAfterwards addNeverAllowedRegex
addNeverAllowedStrAfterwards isXssFound removeEvilAttributes removeEvilHtmlTags
removeNeverAllowedOnEventsAfterwards removeNeverAllowedRegex removeNeverAllowedStrAfterwards setReplacement
setStripe4byteChars xss_clean

addEvilAttributes(string[] $strings): $this

Add some strings to the "_evil_attributes"-array.

Parameters:

  • string[] $strings

Return:

  • $this

addEvilHtmlTags(string[] $strings): $this

Add some strings to the "_evil_html_tags"-array.

Parameters:

  • string[] $strings

Return:

  • $this

addNeverAllowedOnEventsAfterwards(string[] $strings): $this

Add some strings to the "_never_allowed_on_events_afterwards"-array.

Parameters:

  • string[] $strings

Return:

  • $this

addNeverAllowedRegex(string[] $strings): $this

Add some strings to the "_never_allowed_regex"-array.

Parameters:

  • string[] $strings

Return:

  • $this

addNeverAllowedStrAfterwards(string[] $strings): $this

Add some strings to the "_never_allowed_str_afterwards"-array.

Parameters:

  • string[] $strings

Return:

  • $this

isXssFound(): bool|null

Check if the "AntiXSS->xss_clean()"-method found an XSS attack in the last run.

Parameters: nothing

Return:

  • bool|null will return null if the "xss_clean()" wan't running at all

removeEvilAttributes(string[] $strings): $this

Remove some strings from the "_evil_attributes"-array.


WARNING: Use this method only if you have a really good reason.

Parameters:

  • string[] $strings

Return:

  • $this

removeEvilHtmlTags(string[] $strings): $this

Remove some strings from the "_evil_html_tags"-array.


WARNING: Use this method only if you have a really good reason.

Parameters:

  • string[] $strings

Return:

  • $this

removeNeverAllowedOnEventsAfterwards(string[] $strings): $this

Remove some strings from the "_never_allowed_on_events_afterwards"-array.


WARNING: Use this method only if you have a really good reason.

Parameters:

  • string[] $strings

Return:

  • $this

removeNeverAllowedRegex(string[] $strings): $this

Remove some strings from the "_never_allowed_regex"-array.


WARNING: Use this method only if you have a really good reason.

Parameters:

  • string[] $strings

Return:

  • $this

removeNeverAllowedStrAfterwards(string[] $strings): $this

Remove some strings from the "_never_allowed_str_afterwards"-array.


WARNING: Use this method only if you have a really good reason.

Parameters:

  • string[] $strings

Return:

  • $this

setReplacement(string $string): $this

Set the replacement-string for not allowed strings.

Parameters:

  • string $string

Return:

  • $this

setStripe4byteChars(bool $bool): $this

Set the option to stripe 4-Byte chars.


INFO: use it if your DB (MySQL) can't use "utf8mb4" -> preventing stored XSS-attacks

Parameters:

  • bool $bool

Return:

  • $this

xss_clean(array|mixed $str): mixed

XSS Clean


Sanitizes data so that "Cross Site Scripting" hacks can be prevented. This method does a fair amount of work but it is extremely thorough, designed to prevent even the most obscure XSS attempts. But keep in mind that nothing is ever 100% foolproof...


Note: Should only be used to deal with data upon submission. It's not something that should be used for general runtime processing.

Parameters:

  • array|mixed $str <p>input data e.g. string or array of strings</p>

Return:

  • mixed

Support

For support and donations please visit Github | Issues | PayPal | Patreon.

For status updates and release announcements please visit Releases | Twitter | Patreon.

For professional support please contact me.

Thanks

  • Thanks to GitHub (Microsoft) for hosting the code and a good infrastructure including Issues-Managment, etc.
  • Thanks to IntelliJ as they make the best IDEs for PHP and they gave me an open source license for PhpStorm!
  • Thanks to Travis CI for being the most awesome, easiest continous integration tool out there!
  • Thanks to StyleCI for the simple but powerfull code style check.
  • Thanks to PHPStan && Psalm for relly great Static analysis tools and for discover bugs in the code!

License

FOSSA Status

Comments
  • Added a new public method stringHasXss

    Added a new public method stringHasXss

    Added a new public method stringHasXss, useful when we just want to know if the given string has or not a malicious XSS code. Useful in a pre-dispatch method, to make sure we are going to call a safe URL when typed by the user.

    Updated the unit tests for the new method.


    This change is Reviewable

    opened by brunoflmg 15
  • False positive in string

    False positive in string

    Hello, I am using the library to prevent XSS attacks. When I input the string Mondragon, the string is recognized as XSS because it contains the word ondrag, which is in the $_never_allowed_str_afterwards list. I was wondering if there is any chance in improving the detection algorithm, maybe an equal sign shoud follow some of the $_never_allowed_str_afterwards words? (For example onDrag= instead of onDrag) Or maybe would it be possible to have a method to customize the $_never_allowed_str_afterwards list, in order to remove some of the words in it? I see that is it possible to remove evil html tags (removeEvilHtmlTags) and attributes (removeEvilAttributes) but no modification is allowed on the $_never_allowed_str_afterwards list.

    Thanks for the help,

    opened by gioialorusso 13
  • Fatal error: Uncaught Error: Class 'UTF8' not found

    Fatal error: Uncaught Error: Class 'UTF8' not found

    Hi,

    I would like use your anti-xss library, but I have an error message. So, I write a native php code and included your AntiXSS.php.

    include "inc/AntiXSS.php";

    Then I call:

    $antiXss = new AntiXSS();

    I put the $antiXss->xss_clean($input);

    Result:

    Fatal error: Uncaught Error: Class 'UTF8' not found in include\AntiXSS.php:1933 Stack trace: #0 [internal function]: AntiXSS->_decode_entity(Array) #1 include\AntiXSS.php(2472): preg_replace_callback('/<\\w+.*+/si', Array, 't\xC5\xB1zolt\xC3\xB3<scipt...') #2 include\AntiXSS.php(1985): AntiXSS->_decode_string('t\xC5\xB1zolt\xC3\xB3<scipt...') #3 include\AntiXSS.php(2907): AntiXSS->_do('t\xC5\xB1zolt\xC3\xB3<scipt...') #4 modules\keres\keres_index.php(22): AntiXSS->xss_clean('t\xC5\xB1zolt\xC3\xB3<scipt...') #5 engine.php(19): include('\m...') #6 index.php(216): include('...') #7 {main} thrown in include\AntiXSS.php on line 1933

    Can you help me?

    opened by hunnomad 11
  • The content of the code block submitted by the editor will be added with additional line breaks

    The content of the code block submitted by the editor will be added with additional line breaks

    Below is the code in my submission.

    <pre><code>
    throttle(fn, delay) {
        let _this = this, context, args, result;
        let timeout = null;
        let previous = 0;
        const later = () =&gt; {
            previous = 0;
            timeout = null;
            result = fn.apply(context, args);
            if (!timeout) {
                context = args = null;
            }
        };
        return () =&gt; {
            let now = _this.now();
            if (!previous) {
                previous = now;
            }
            let remaining = delay - (now - previous);
            context = this;
            args = arguments;
            if (remaining &lt;= 0 || remaining &gt; delay) {
                if (timeout) {
                    clearTimeout(timeout);
                    timeout = null;
                }
                previous = now;
                result = fn.apply(context, args);
                if (!timeout) {
                    context = args = null;
                }
            } else if (!timeout) {
                timeout = setTimeout(later, remaining);
            }
            return result;
        };
    }
    </code></pre>
    

    After testing, it is caused by the setTimeout keyword. Please help me see how to deal with it, thank you.😊

    opened by isszz 7
  • clean src element wrongly

    clean src element wrongly

    Hi, I've developed a UGC service with laravel that users can publish posts. I've used this package to prevent xss, and used xss_clean method in validation before post can published. But sometimes there are some issues that clean wrong contents. For example: before xss_clean: <img src="https://****/upload/***/****/***/2nshd82y68kxvbbb/u82nc9375n.png" alt="توییتر " />

    after xss_clean: <img src="" />

    in this post there are 4 img tags but xss_clean cleaned only this one !!

    Or in another post: before: <img src="https://****/upload/***/*****/***/ksjd827xchu2/m2sjhd262sj" alt="فضا (فضای سفید یا خالی) - Space"/>

    after: <img src="" />

    opened by Peyman-Manutd 7
  • False positive for emails

    False positive for emails

    Hello,

    I have an issue where an email would be considered dangerous when enclosed between <> tags. For example:

    <[email protected]>. It's basically <$keyword(*.)@gmail.com> where $keyword is something that would be considered the start of a dangerous tag like style, script etc.

    What happens is that the tags are encoded like &lt; and &gt; causing the content to be double escaped in my case. Any ideas how to fix this behaviour or if it is possible at all?

    Thanks!

    opened by azertys 6
  • Add a test for URL escaping bug

    Add a test for URL escaping bug

    Hello!

    I think we have a bug when an URL have a +param/other- sequence it removes. I added a failing test case for that. It caused by this regex https://github.com/voku/anti-xss/blob/master/src/voku/helper/AntiXSS.php#L2731

    Could you have a look, please? Thanks!


    This change is Reviewable

    opened by 1ed 6
  • question about usage

    question about usage

    Hello

    We think about use this class on our cms ( https://github.com/pi-engine/pi ) Instead of this filter ( https://github.com/pi-engine/pi/blob/develop/lib/Pi/Filter/XssSanitizer.php and https://github.com/pi-engine/pi/blob/develop/lib/Pi/Security/Xss.php) for make support better php7

    Just I have question, can we make squerty little simpler ? for example we use ckeditor and users make some custom setting ( usually use css codes ) but this project remove all custom css codes , can we manage it?

    opened by voltan 6
  • False positive for Document.aspx in link

    False positive for Document.aspx in link

    What is this feature about (expected vs actual behaviour)?

    False positive for URL in href attribute removes whole URL if it contains Document.aspx.

    How can I reproduce it?

    $antiXss = new \voku\helper\AntiXSS();
    $antiXss->xss_clean('<a href="http://google.com/Document.aspx">long link</a>');
    
    opened by adam-boduch 5
  • False positive for

    False positive for "wordContainingFile(" in `_sanitize_naughty_javascript`

    Hi, I think i stumbled on a false positive in _sanitize_naughty_javascript

    What is this feature about (expected vs actual behaviour)?

    • do no detect XSS

    How can I reproduce it?

    
    $str = '<p>Montageprofile(n)</p>';
    
    $antiXss = new \voku\helper\AntiXSS(); 
    $antiXss->xss_clean($str);
    
    assert(false === $antiXss->isXssFound());
    

    Does it take minutes, hours or days to fix?

    • minutes, maybe

    Any additional information?

    https://github.com/voku/anti-xss/blob/master/src/voku/helper/AntiXSS.php#L1680:L1721

    • regex is missing a space before the keyword pattern, blablafile(n) is no valid js
    opened by Fahl-Design 4
  • False positive for `foo=baz"`">

    False positive for `foo="baz"`

    Input:

    <span>
        foo="<span class="bar">baz</span>"
    </span>
    

    Expected result (no changes):

    <span>
        foo="<span class="bar">baz</span>"
    </span>
    

    Actual result:

    <span>
        foo="&lt;span class="bar">baz</span>"
    </span>
    

    The change is coming from this part: https://github.com/voku/anti-xss/blob/19da849cb2dd44d7c25e3eb0ee6cc9433ff9a106/src/voku/helper/AntiXSS.php#L1543-L1559

    opened by gharlan 4
  • false positive in url geolocation.com

    false positive in url geolocation.com

    What is this feature about (expected vs actual behaviour)?

    Link url https://www.geolocation.com is not passing, also https://www.history.com

    How can I reproduce it?

    insert a link with one of the URLs above and it will report as it have xss

    Does it take minutes, hours or days to fix?

    don't know

    Any additional information?

    if the url have some string of (_never_allowed_js_callback_regex) plus a dot, it will report as positive. this detection occurs in lines (1153-1161) of AntiXSS.php

    opened by alechner 0
  • false positive on name

    false positive on name

    What is this feature about (expected vs actual behaviour)?

    Trying to validate a string containing a person's name, the method xss_clean returns a modified string, please see the following screens:

    Screenshot 2022-11-10 at 17 28 06 Screenshot 2022-11-10 at 17 27 04

    How can I reproduce it?

    Here's the minimum code I can provide for reproducing the issue:

    $antiXss = new AntiXSS();
    $value = "Eva L'Host";
    $cleaned = $antiXss->xss_clean($value);
    dump($value, $cleaned);
    

    Any additional information?

    I tried with modified versions of the string, like "Eve L'Host" and it's validated correctly. I guess the library is interpreting the string "Eva L'Host" as an attempt to use "eval".

    I found a test (https://github.com/voku/anti-xss/blob/master/tests/XssTest.php) that should ensure that "ordinary strings" containing the word "eval" are validated correctly, but I guess different strings with spaces and single quotes may lead to false positives.

    opened by f17208 0
  • FP: text like

    FP: text like " system (e.g. Windows 10, Mac OS X etc.) "

    I think this issue is similar to a problem I'm having with text like system (… being considered dangerous. For example the string the operating system (e.g. Windows 10, Mac OS X etc.) you are using is considered to contain XSS.

    Would a similar change for system work? @voku , @Fahl-Design

    Originally posted by @mike-healy in https://github.com/voku/anti-xss/issues/99#issuecomment-1214704658

    opened by voku 0
  • False positive on closed sorce tag.

    False positive on closed sorce tag.

    What is this feature about (expected vs actual behaviour)?

    If we tryind to validate HTML code like this:

    <video controls="controls" width="300" height="150">
    <source src="https://leonardo.osnova.io/49ab16a3-64a6-505e-97f1-34c83f122a49/-/preview/700/-/format/webp/" />
    <source src="https://leonardo.osnova.io/49ab16a3-64a6-505e-97f1-34c83f122a49/-/preview/700/-/format/webp/" />
    </video>
    

    We got an XSS error rise. Howewer it is an valid HTML code, with allowed tags: video & sorce.

    How can I reproduce it?

    $html = <<<HTML
    <video controls="controls" width="300" height="150">
    <source src="https://leonardo.osnova.io/49ab16a3-64a6-505e-97f1-34c83f122a49/-/preview/700/-/format/webp/" />
    <source src="https://leonardo.osnova.io/49ab16a3-64a6-505e-97f1-34c83f122a49/-/preview/700/-/format/webp/" />
    </video>
    HTML;
    
    $antiXss = new AntiXSS();
    $antiXss->removeEvilHtmlTags(['video', 'sorce']);
    $antiXss->xss_clean($html);
    var_dump($antiXss->isXssFound());
    

    Any additional information?

    On validation system check a valid src attribute in tag and this is what this regexp finds:

    src="https://leonardo.osnova.io/49ab16a3-64a6-505e-97f1-34c83f122a49/-/preview/700/-/format/webp/" /
    

    Obviously the last / is ambiguous and it show only, that this tag is closed.

    opened by genetus 1
  • Update codecov/codecov-action action to v3

    Update codecov/codecov-action action to v3

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | codecov/codecov-action | action | major | v2 -> v3 |


    Release Notes

    codecov/codecov-action

    v3

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.


    This change is Reviewable

    opened by renovate[bot] 3
Owner
Lars Moelleken
Webdeveloper & Sysadmin | egrep '#php|#js|#html|#css|#sass'
Lars Moelleken
XSS, CSRF, SQLi, RFI attacks/defences in eClass site.

Open eClass 2.3 Disclaimer This repository contained a vulnerable version of eclass (check very first commit for initial version, if you want to exper

Vissarion Moutafis 10 Feb 14, 2022
Security CSRF (cross-site request forgery) component provides a class CsrfTokenManager for generating and validating CSRF tokens.

Security Component - CSRF The Security CSRF (cross-site request forgery) component provides a class CsrfTokenManager for generating and validating CSR

Symfony 1.5k Jan 3, 2023
HTML sanitizer, written in PHP, aiming to provide XSS-safe markup based on explicitly allowed tags, attributes and values.

TYPO3 HTML Sanitizer ℹ️ Common safe HTML tags & attributes as given in \TYPO3\HtmlSanitizer\Builder\CommonBuilder still might be adjusted, extended or

TYPO3 GitHub Department 18 Jul 18, 2022
Laravel Security was created by, and is maintained by Graham Campbell, and is a voku/anti-xss wrapper for Laravel, using graham-campbell/security-core

Laravel Security Laravel Security was created by, and is maintained by Graham Campbell, and is a voku/anti-xss wrapper for Laravel, using graham-campb

Graham Campbell 170 Nov 20, 2022
Easy to use cryptographic framework for data protection: secure messaging with forward secrecy and secure data storage. Has unified APIs across 14 platforms.

Themis provides strong, usable cryptography for busy people General purpose cryptographic library for storage and messaging for iOS (Swift, Obj-C), An

Cossack Labs 1.6k Jan 6, 2023
JObfuscator — Java Source Code Obfuscation & Protection

JObfuscator is a source code obfuscator for the Java programming language. It can protect your Java source code and algorithms from hacking, cracking, reverse engineering, decompilation, and technology theft.

Bartosz Wójcik 8 Nov 6, 2022
Akismet: Spam Protection for MODX

Akismet: Spam Protection for MODX Developed by modmore Introduction Akismet is an advanced spam protection service that uses AI to analyse form submis

modmore | More for MODX 3 Nov 12, 2021
SyCaptchaBundle is a form protection bundle made for Symfony, including a set of CAPTCHA challenges that should stop any malicious requests from submitting your forms.

SyCaptchaBundle is a form protection bundle made for Symfony, including a set of CAPTCHA challenges that should stop any malicious requests from submitting your forms.

Matt 1 Oct 4, 2022
PHP CORS (Cross-origin resource sharing) middleware.

CORS PHP CORS (Cross-origin resource sharing) middleware. Support Array, Coding in Native PHP Using PSR-7 PSR-15 Support Symfony Support Laravel Suppo

Seven Du 269 Nov 9, 2022
CORS (Cross-Origin Resource Sharing) middleware for Hyperf application.

CORS Middleware for Hyperf Implements fruitcake/laravel-cors for Hyperf. Features Handles CORS pre-flight OPTIONS requests Adds CORS headers to your r

Gang Wu 8 Sep 19, 2022
A Simple Cross Origin Resource Sharing for Lumen Framework (5.*).

Lumen Cors Package A Simple Cross Origin Resource Sharing for Lumen Framework. Note: That should works fine on Laravel Framework too, but the tests ar

Vagner Luz do Carmo 46 Jul 27, 2022
Informative site with EoL dates of everything

endoflife.date Keep track of various End of Life dates as they are approaching. Visit https://endoflife.date for a list of supported products. This in

endoflife.date 1.2k Jan 4, 2023
PHPIDS (PHP-Intrusion Detection System) is a simple to use, well structured, fast and state-of-the-art security layer for your PHP based web application

PHPIDS PHPIDS (PHP-Intrusion Detection System) is a simple to use, well structured, fast and state-of-the-art security layer for your PHP based web ap

null 752 Jan 3, 2023
php-chmod is a PHP library for easily changing permissions recursively.

PHP chmod php-chmod is a PHP library for easily changing the permissions recursively. Versions & Dependencies Version PHP Documentation ^1.1 ^7.4 curr

Mathias Reker ⚡️ 5 Oct 7, 2022
PHP 5.x support for random_bytes() and random_int()

random_compat PHP 5.x polyfill for random_bytes() and random_int() created and maintained by Paragon Initiative Enterprises. Although this library sho

Paragon Initiative Enterprises 8k Jan 5, 2023
PHP Secure Communications Library

phpseclib - PHP Secure Communications Library Supporting phpseclib Become a backer or sponsor on Patreon One-time donation via PayPal or crypto-curren

null 4.9k Jan 7, 2023
Simple Encryption in PHP.

php-encryption composer require defuse/php-encryption This is a library for encrypting data with a key or password in PHP. It requires PHP 5.6 or new

Taylor Hornby 3.6k Jan 3, 2023
Standards compliant HTML filter written in PHP

HTML Purifier HTML Purifier is an HTML filtering solution that uses a unique combination of robust whitelists and aggressive parsing to ensure that no

Edward Z. Yang 2.7k Jan 5, 2023
A database of PHP security advisories

PHP Security Advisories Database The PHP Security Advisories Database references known security vulnerabilities in various PHP projects and libraries.

null 1.9k Dec 18, 2022