setAttribute lijkt te worden genegeerd

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

- Ariën  -
Beheerder

- Ariën -

21/09/2017 20:21:59
Quote Anchor link
Ik heb hier een mooie method van een class die non-SSL URL's omzet naar mijn SSL camo-proxy.
Het werkt echt heel mooi, maar... ik merk dat setAttribute op lijn 11 wordt genegeerd.

Ik zie dat er in de img-tag die in de for-loop aangeroepen wordt wel netjes de URL wordt ge-replaced, maar er komt geen nieuw attribuut bij die 'data-original-src' heet?

Waarom negeert hij dit?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
public function parse($string) {
    if($this->settings['camo_enabled'] == true) {
        $doc = new DOMDocument();
        $doc->loadHTML($string);
        $images = $doc->getElementsByTagName('img');
        //$imgarray = array();
        foreach ($images as $image) {
        $url = $image->getAttribute('src');
        if(substr($url, 0, 8) != 'https://') {
            $image->setAttribute('data-original-src', $url);
            $camo = $this->proxy_url($url);
            $string = str_replace($image->getAttribute('src'), $camo, $string);
            unset($url, $camo);
        }
        }
    }

    return $string;
    }

?>
Gewijzigd op 21/09/2017 20:23:12 door - Ariën -
 
PHP hulp

PHP hulp

26/04/2024 13:37:24
 
Thomas van den Heuvel

Thomas van den Heuvel

21/09/2017 22:16:09
Quote Anchor link
De documentatie van getElementsByTagName() zegt hierover:
Quote:
This function returns a new instance of class DOMNodeList containing all the elements with a given local tag name.

Oftewel, je bent naar alle waarschijnlijkheid gegevens in een aparte kopie aan het wijzigen die alleen binnen de scope van de functie bestaat, het origineel blijft ongewijzigd.

Meerdere oplossingen mogelijk. Je zou bijvoorbeeld de functie in eerste instantie rechtstreeks het object (DOMDocument) kunnen voeren. Objecten zijn call by reference dus ben je daarmee direct in het origineel aan het werken.
Gewijzigd op 21/09/2017 22:16:45 door Thomas van den Heuvel
 
Rob Doemaarwat

Rob Doemaarwat

21/09/2017 22:19:22
Quote Anchor link
Met je str_replace() vervang je alleen de src in de originele HTML ($string). Als je ook het data-original-src terug wilt zien zul je de hele <image> tag moeten vervangen.
 
- Ariën  -
Beheerder

- Ariën -

21/09/2017 22:21:34
Quote Anchor link
Euh...?
Maar getAttribute() werkt wel.
Het is puur dat setAttribute() niet werkt.


Ik zie het al, ik ga kijken of ik de image-tag opnieuw op kan bouwen.
Gewijzigd op 21/09/2017 22:31:04 door - Ariën -
 
Rob Doemaarwat

Rob Doemaarwat

21/09/2017 22:50:52
Quote Anchor link
Als je image URL's een beetje netjes/consequent tussen quootjes staan zou je het ook zo kunnen doen (stel altijd tussen ")
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$src = $image->getAttribute('src');
$string = str_replace($src, "$camo\" data-original-src=\"$src", $string);

Een soort van HTML-injectie zeg maar (de bestaande src=" en sluit " recyclen).

Als de quootjes niet consequent zijn kun je evt nog met een regex aan de slag, maar dan wordt het al gauw nasty.

Toevoeging op 21/09/2017 22:51:50:

Gaat trouwens fout als hetzelfde plaatje (URL) 2x in de $string voorkomt
 
- Ariën  -
Beheerder

- Ariën -

21/09/2017 22:59:40
Quote Anchor link
Als ik zo denk kan ik beter met een foreach alle attributen langsgaan, element opnieuw opbouwen, en de eerste img weer wissen. Dan ben je pas robuust bezig. ;-)

Die injectie ziet er wel kazig uit, inderdaad.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.