Bug 31219: Prevent JS injection in patron extended attributes
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 25 Jul 2022 07:23:25 +0000 (09:23 +0200)
committerArthur Suzuki <arthur.suzuki@biblibre.com>
Wed, 26 Oct 2022 07:31:58 +0000 (09:31 +0200)
We are sanitizing other attributes but "extended patron attributes".

Test plan:
Make a patron attribute editable at the OPAC
Edit an existing patron, or register a new one
Use a script tag in the new value ("<script>alert("booh!")</script>" for
instance)
With this patch the value is remove if containing an HTML tag that is
not br b i em big small strong (see C4::Scrubber)

Signed-off-by: Mark Hofstetter <koha@trust-box.at>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit cf773c9f1c21cd67fbb0475770b121d64bc5960f)
Signed-off-by: Arthur Suzuki <arthur.suzuki@biblibre.com>
opac/opac-memberentry.pl

index 479bc91..9c8ccfc 100755 (executable)
@@ -737,6 +737,7 @@ sub ParsePatronAttributes {
 
     my $delete_candidates = {};
 
+    my $scrubber = C4::Scrubber->new();
     while ( my ( $code, $value ) = $ea->() ) {
         if ( any { $_ eq $code } @editable_attribute_types ) {
             # It is an editable attribute
@@ -746,7 +747,7 @@ sub ParsePatronAttributes {
             }
             else {
                 # we've got a value
-                push @attributes, { code => $code, attribute => $value };
+                push @attributes, { code => $code, attribute => $scrubber->scrub( $value ) };
 
                 # 'code' is no longer a delete candidate
                 delete $delete_candidates->{$code}