werkte eerst wel nu niet ????

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Junior Java Developer / DevOps / Cloud / Financi&e

Functieomschrijving Wil jij graag aan de slag als Java Developer? Heb jij affiniteit met de financiële branche? Wil jij systemen ontwikkelen die een grote impact hebben en binnen de gehele organisatie gebruikt worden? Solliciteer dan nu! Als Developer ben je primair verantwoordelijk voor het ontwerpen, bouwen en testen van software in al zijn facetten: Het designen en developen/ontwikkelen in Java van nieuwe software en nieuwe features op bestaande functionaliteiten; Het reviewen en overzien van de geschreven code; Het continu verbeteren van de richtlijnen en standaarden voor het geleverde werk binnen het team; Het bijdragen aan het verder automatiseren van de

Bekijk vacature »

Noordoost Java Developer vacature

Java Developer Noordoost Word onderdeel van een topteam met ervaren Java Developers. Loop voorop in de ontwikkelingen en help mee innoveren. Focus op Java Wij bouwen State of the Art applicaties met de nieuwste Java technologie en frameworks. Dit doen we door ons te richten op de open source-oplossingen binnen de wereld van Java, alle nieuwe ontwikkelingen te volgen en onze kennis te delen binnen onze eigen Java Community. Dit betekent bijvoorbeeld dat we aanwezig zijn op veel conferenties; Oracle Code One, Devoxx en JFall. We organiseren ook onze eigen collegiale sessies en hackatons waar we kennis en plezier combineren.

Bekijk vacature »

Senior Microsoft Dynamics Developer

Jouw uitdaging: Ben jij sterk in het succesvol ontwikkelen van maatwerk componenten op het Dynamics platform? En wil je actief meewerken aan de ontwikkeling van ons Digital Customer Experience portfolio? Dan is dit iets voor jou! Voor de Digital Customer Experience afdeling (DCX) zijn we op zoek naar een Senior Microsoft Dynamics Developer. In deze functie ben je verantwoordelijk voor de succesvolle ontwikkelen van maatwerk componenten op het Dynamics platform bij toonaangevende organisaties. Denk daarbij aan het realiseren van integratie met front en backoffice systemen op basis van Azure PaaS of het ontwikkelen van complexe plug-ins. Daarnaast werk je actief

Bekijk vacature »

.NET Developer / C# / miljarden berichten / Zorgse

Functieomschrijving Zit jij aan je plafond als .NET C# Developer? Wil jij de stap maken naar dé .NET software organisatie van Tilburg? Lees dan nu verder! Bedrijfsomschrijving werken bij een organisatie waar je met het volgende in aanraking komt: High-intensity dataverkeer, meer dan 2,7 miljard berichten per jaar; Development aan .NET applicaties die maandelijks miljoenen euro's verwerken; Salaris als developer tot bijna 70.000 euro op jaarbasis; Geen partij in de omgeving van Tilburg die zo'n complex .NET applicatielandschap heeft; Werken aan meer dan 50 diensten, verdeeld over 10 Scrum teams; Focus op o.a.: C# en ASP.NET in een Agile organisatie;

Bekijk vacature »

Sitecore Developer/ .Net Developer/ Web developmen

Functieomschrijving Ben jij een developer die graag werkt aan een cruciaal platform? Schroom jij het niet om jouw brede skillset in te zetten om verbeterslagen aan te dragen en uit te voeren? Lees dan snel verder! Bouwen van nieuwe functionaliteiten (40%) Door ontwikkelen van het complexe consumenten platform (25%) Bugfixing (20%) Testen van (jouw) code, handmatig-, unit-, integratie- en browser tests (15%) Functie-eisen Minimaal een MBO-diploma met HBO werk- en denk niveau; Minimaal 3 a 5 ervaring als .NET developer; Ervaring met C# en ASP.NET ; Ervaring met webapplicaties; Ervaring binnen een SCRUM/Agile omgeving; Inzicht in Front-end technieken en hoe

Bekijk vacature »

.NET Developer

.NET Developer De uitgebreide versie Jij hebt ruim twee jaar ervaring als developer. Nu wil je graag je tanden zetten in nog complexere projecten. Samen met je team bereik je nieuwe hoogtes en zelfstandig maak je meters. Je hebt behoefte aan collegae die jou alles leren op het gebied van technologie maar wilt tegelijkertijd ook graag je eigen opgedane kennis delen. Alles wat vandaag nog onbekend is, moet je morgen toepassen in de volgende uitdaging en dàt is wat jou scherp houdt. Je hebt geen zin in een 60-urige werkweek maar haalt wel plezier uit zo nu en dan een

Bekijk vacature »

JUNIOR FRONT-END DEVELOPER

JUNIOR FRONT-END DEVELOPER Utrecht Technology 13th month pay & Holiday allowance Bonus Program 26 holidays Training & Learning opportunities Laptop & Smartphone 32-40 hours p.w. Junior Front-end Developer Are you a user focused Front-end developer that will help our clients realize their digital strategies? Then we have the right challenge for you! Your job For our ever growing Interactive, Front-end team within Accenture Technology we’re looking for experienced Front-end developers that want to improve user experiences through technology. You’re enthusiastic about the web and always improving your knowledge and skill. You have a drive to master your craft. Your team

Bekijk vacature »

Apex Developer/Ontwikkelaar in Zuid-Holland

Functieomschrijving Als Apex enthousiast ben jij een welkome versterking voor dit team dat momenteel 4FTE groot is op de IT-afdeling. Je komt zodoende terecht in een hecht team ben met mensen die graag met Apex en ook met Oracle werken. Binnen deze functie ben je verantwoordelijk voor het achterhalen van de juiste behoeften bij de interne klanten. Daarnaast werk je aan het onderhouden, door ontwikkelen en nieuwbouw van maatwerk applicaties. Voor 80% bestaat het werk uit APEX en voor 20% uit PL/SQL. Daarbij kom je te werken binnen een gedreven team waarbij de communicatielijnen kort zijn en er zeker ook

Bekijk vacature »

Senior Lead Developer / Full stack / .NET / Azure

Functieomschrijving Wil jij graag als meewerkend voorman werken in een ambitieus bedrijf dat moderne software ontwikkelt voor grote klanten? Ben jij goed thuis in .NET omgevingen en het Azure platform en zorg je graag dat alles in goede banen loopt? Lees dan snel verder! Ontwikkelen en testen van de software en het framework via Scrum principes; Dagelijks aansturen van het Development Team; Coördineren van projecten; Kwaliteitscontrole op de code; Architectuur bepalen en zorgen dat deze gevolgd wordt; Overzicht over functioneel en technisch ontwerp van de software; Sparren met directie over IT strategieën. Functie-eisen Ruime ervaring met het .NET framework, ASP.NET,

Bekijk vacature »

Java Custom Software Developer

Jouw rol Als Java developer houd jij van uitdagende maatwerk oplossingen. Het liefste bouw je aan aan complexe en grootschalige oplossingen. Laatst zag je bijvoorbeeld nog een slimme oplossing voorbij komen die je graag zou willen uitwerken. Moet je daarvoor nieuwe technologie leren kennen, dan school jij jezelf bij. Soms moet je je collega's en de klant overtuigen om jouw idee te omarmen. Als jij dan het door jou aangebrachte idee ziet draaien dan kijk jij er alweer naar uit om de volgende oplossing te bouwen. Plaats in de organisatie Binnen onze Custom Software Development practice (CSD) werken we gezamenlijk

Bekijk vacature »

Xamarin Developer

Functieomschrijving Ben jij de Xamarin expert die de volgende stap in zijn carrière wil zetten? Houd jij er van om veelgebruikte apps verder uit te bouwen terwijl je de kwaliteit blijft waarborgen en heb je daarnaast zelf innovatieve ideeën ? Lees dan snel verder! Samen met het gehele mobile app team ben jij verantwoordelijk voor: de (door)ontwikkeling van Native applicaties voor Android en iOS; het verder samenbrengen van de applicatie en de web omgeving; de innovatie van de applicatie, het is belangrijk dat jij zelf meedenkt en jouw ideeën voorlegt binnen het team; feedback vanuit de gebruikers te behandelen en

Bekijk vacature »

Java developer - Utrecht

Voor één van onze klanten zijn wij op zoek naar een Java developer Onze klant is actief in het ontwikkelen van de software voor zorginstellingen. Het cliënten en patienten dossier wat onze klant levert, wordt inmiddels dagelijks gebruikt door maar liefst 50 zorgaanbieders en 20.000 professionals. Ze is onderdeel van een samenwerkingsverband van drie softwareleveranciers in de zorgmarkt en zijn specialist én marktleider op dit gebied. Onze klant zelf is gevestigd in Veenendaal en focust zich op de gehandicaptenzorg, jeugdzorg en GGZ in Nederland en België. Het bedrijf is ambitieus en heeft visie: alle medewerkers dragen een echt "zorghart" met

Bekijk vacature »

CMS Developer / Sitecore / C# / DevOps

Functieomschrijving Ben jij een Developer met kennis van C# / .NET en wil jij je graag specialiseren op het gebied van Sitecore? Doe jij dit het liefst binnen een gerenommeerde organisatie in de zorg? Dan is dit dé uitdaging voor jou! Binnen deze rol zal jij je als C# / .NET Developer (met de focus op Sitecore) gaan richten op het ontwikkelen van webapplicaties, platformen en portalen middels o.a. C#, Azure en Microservices die door duizenden mensen gebruikt worden? Reageer dan nu! Het ontwikkelen van webapplicaties, platformen en portalen middels o.a. C#, Sitecore, Azure en Microservices; Het leveren van jouw

Bekijk vacature »

Full stack C# .NET web developer, inhouse project

Ben je een C# .NET developer met circa 0 tot 5 jaar ervaring en op zoek naar een nieuwe baan als web developer in Rotterdam? Bij een organisatie waarbij je inhouse kan werken maar wel de afwisseling hebt van telkens nieuwe projecten voor externe klanten? En het liefste een organisatie waar je de zekerheid en mogelijkheden hebt die horen bij een groot bedrijf maar waarbij je tevens de informaliteit en vrijheid hebt van een kleine club? Daarbij natuurlijk een goed salaris, uitstekende pensioenregeling, onkostenvergoeding, de nieuwste versie van de Iphone of Samsung, plus laptop. En de mogelijkheid voor een leaseauto

Bekijk vacature »

Delphi Developer gezocht voor organisatie die Delp

Functieomschrijving Dankzij jouw software krijgen klanten meer inzicht in hun processen in kunnen deze processen bijvoorbeeld steeds verder geautomatiseerd worden. Je komt aan zeer uiteenlopende projecten te werken voor een grote diversiteit aan opdrachtgevers. Hierbij kun je bijvoorbeeld denken aan een applicatie die gebruikt wordt voor het plannen van werkzaamheden, maar bijvoorbeeld ook een website voor een klant. Één ding is zeker; Delphi is jouw kerntaak! Daarnaast werk je ook met SQL. Je opleidingsniveau is voor deze functie van ondergeschikt belang, het is belangrijk dat je ruime ervaring hebt op het gebied van Delphi. Samen met je collega's ben je

Bekijk vacature »
Sylvester vader

sylvester vader

11/09/2019 09:41:32
Quote Anchor link
aaaaaa ok uhm mischien is dit iets heel simpels maar ik snap het even niet

ik heb een upload script voor foto-albums
deze werkt helemaal top, tenminste totdat mijn klant mij gister opbelde en zegt dat de foto's niet werken

dus ik gaan checken en inderdaad het werkt niet

de upload werkt wel
echter zet hij de gegevens niet meer door naar de database
en naar mijn weten is hier niks aan veranderd

het deleten van foto's uit de database enzo werkt wel via zelfde script

upload deel
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
21
protected function handle_file_upload($uploaded_file, $name, $size, $type, $error,
$index = null, $content_range = null) {
$file = parent::handle_file_upload(
$uploaded_file, $name, $size, $type, $error, $index, $content_range
);

if (empty($file->error)) {
    $sql = 'INSERT INTO `'.$this->options['db_table']
        .'` (`account`, `users__id`, `filename`, `mainimage`)'
        .' VALUES ('.$this->options['account'].','.$this->options['id'].', ?, ?)';
    $query = $this->db->prepare($sql);
    $query->bind_param(
            'si',        
            $file->name,
            $file->mainimage    
            );
            $query->execute();
            $file->id = $this->db->insert_id;
        }
        return $file;
    }


delete deel
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
public function delete($print_response = true) {
        $response = parent::delete(false);
        foreach ($response as $name => $deleted) {
            if ($deleted) {
                $sql = 'DELETE FROM '.$this->options['db_table'].' WHERE users__id='.$this->options['id'].' AND account='.$this->options['account'].' AND filename=?';
                $query = $this->db->prepare($sql);
                 $query->bind_param('s', $name);
                $query->execute();
            }
        }
        return $this->generate_response($response, $print_response);
    }
 
PHP hulp

PHP hulp

17/01/2020 13:49:24
 
Ivo P

Ivo P

11/09/2019 11:17:14
Quote Anchor link
hij zet niets in de database.

Eerste gedachte: de query die de insert doet, mislukt.
Wat is de foutmelding die er komt bij de insert.

Als geen: wordt de query wel uitgevoerd? Dat is een uitgebreidere zoektocht, dus ik zou eerst eens foutafhandeling rond $query->execute() toevoegen.

Reden zou kunnen zijn dat de auto-increment aan zijn einde zit (bijvoorbeeld als je een tinyint voor een id-kolom hanteert)
 
Sylvester vader

sylvester vader

11/09/2019 13:26:45
Quote Anchor link
ik heb eens nagekeken en inderdad ging er iets mis bij invoer, bij mijn mainimage deel
ik heb deze er tijdelijk maar even uitgehaald nu werkt het wel weer
 
Thomas van den Heuvel

Thomas van den Heuvel

11/09/2019 16:11:51
Quote Anchor link
Even iets heel anders. Waarom maak je gebruik van prepared statements in mysqli? Dit is echt compleet ruk.

Daarnaast, je maakt hier wel een hele rare spagaat door de helft van je DATA gewoon te concateneren in je SQL-string.

Nu zou je zeggen "ja maar dat zijn opties die uit het systeem komen, en dus zijn ze veilig" ofzo. Dat klopt misschien wel, maar iedereen die ooit die code ziet zal zich daarvan moeten vergewissen. Je laat mensen dus onnodig nadenken over query-veiligheid, terwijl prepared statements hier juist voor bedoeld zijn!

En wat als je straks een twijfelgevalletje hebt: een waarde die van een externe bron afkomstig is, maar gevalideerd is en dus veilig is (en daarbij, hoe verschilt dat dan precies van de bovenstaande $this->options)? Neem je deze gewoon in de SQL op? Of toch via een parameter? Maar wat houdt dat dan in als je deze gewoon concateneert, maakt dit dan prepared statements niet helemaal overbodig als je alles gewoon fatsoenlijk vantevoren valideert?

Op dit moment zit er sowieso geen lijn in wat je doet. Ik zou je dringend aanraden om dit te fixen en hierbij gewoon af te stappen van prepared statements in MySQLi. Bij gebrek aan eigen inspiratie doe een van de twee dingen:
- stap over naar PDO en gebruik daar prepared statements (maar dan dus consequent op de goede manier)
- gebruik MySQLi en escape de DATA-delen met real_escape_string() in combinatie met quotes

En wat @Ivo dus zegt, je hebt een manier nodig om foutmeldingen met queries te detecteren en/of af te handelen. Je zou dus sowieso veel profijt hebben van een soort van database-wrapper. Je kunt op die manier veel sneller fouten (met queries) localiseren.

Nu ben je waarschijnlijk nog geen biet wijzer, want in wezen zeg je "het ging fout, en ik weet niet waarom, en nu gaat het weer goed, en ik weet nog steeds niet waarom". Het is jouw taak als programmeur om dit uit te zoeken om herhaling te voorkomen. Code besluit niet zomaar om op het ene moment wel te werken en het andere moment niet. Wat dat betreft is code heel makkelijk: het doet *precies* wat het is voorgeschreven om te doen.
 
Sylvester vader

sylvester vader

11/09/2019 19:28:15
Quote Anchor link
ja meester :P
nee maar je hebt wel gelijk
die prepared statements saten al in het oorspronkelijke login script waar ik 10 jaar mee ben begonnen
voor mysqli gebruikte ik dit niet maar ik kon geen goede werkende manier vinden die voor all mijn paginas werkte en dus heb ik dit gebruikt

ik moet ook een keer het geheel op de schop gooien en nieuw maken
echter is dit niet zo makkelijk gedaan als gezegd
mijn script is om het even heel bot te zeggen jarenlange ideeen scripten en aanpassingen in een werkende bedrijfs omgeving

het zijn serieus misschien wel meer dan 2000 files
ik zou het op dit moment ook niet echt weten
hele boekhoudingen worden met mijn gehele systeem gedaan
POS systemen
verschillende dynamische websites die allemaal met elkaar samenwerken

het is misschien verouderde code maar het werkt en ik verbeter elke dag
en het meeste werkt perfect hoor maar het heeft zeker wel verbetering nodig of eigelijk
geheel nieuw
maar ik kan niet zomaar even een nieuwe maken omdat ik daarvoor een werkende omgeving nodig hebt
ik test veel voordat ik iets online zet maar als scripter kan je ook niet altijd alles voorzien

daar huur ik soms beta testers voor in omdat ik het zelf in mijn 1tje gewoon niet altijd alleen kan doen

bedoeling is dat ik over een jaar een geheel nieuw script ga maken
het bestaande script moet dan eerst helemaal zijn hoe ik het wil
en daarna ga ik het gehele script herschrijven met moderne code

waarschijnlijk moet ik dan een heel team inhuren
want het is echt heeeeeel veel werk

en het moet allemaal dus werken op de oude database zonder ook maar 1 foutje

1 foutje betekent direct faliet voor 10+ bedrijven
1 uur offline kan duizenden euros kosten
om die reden wacht ik dus nog even tot ik zeker weet dat alles perfect is in het oude systeem

en ik denk dat ik bijna zover ben maar soms maak ik snelle aanpassingen in niet noodzakelijke delen en dan krijg ik dus dit soort errors

ach het werkt allemaal weer gelukkig daar gaat het om
 
Thomas van den Heuvel

Thomas van den Heuvel

12/09/2019 13:15:43
Quote Anchor link
Sylvester vader op 11/09/2019 19:28:15:
ik moet ook een keer het geheel op de schop gooien en nieuw maken

Mja, maar met een database-wrapper of als je dit met een uitgebreidere class nog verder uit code abstraheert is dat dus niet nodig. Je probleem op dit moment wordt grotendeels veroorzaakt door hard coding. Beschouw het INSERT-statement uit je oorspronkelijke bericht.

Voorheen gebruikte je waarschijnlijk:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysql_query(...)


Toen schakelde je over op MySQLi:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysqli_query(...)


En toen had je waarschijnlijk gehoord dat prepared statements de bom was en deed je dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$st = $this->db->prepare(...);
$st->bind_param(...);
$st->execute(...);

NB: de naamgeving die jij gebruikt ($query) is niet echt fantastisch. prepare() retourneert een statement object of false. Geef variabelen zelfdocumenterende namen.

Anyhow, volgende keer is het waarschijnlijk weer een andere flavor of the month.

Wat je tot nu toe functioneel hebt gedaan is echter nooit veranderd: je INSERT nog steeds een record in een tabel. Dan je beklag dat er zoveel bestanden zouden zijn waarin je dit soort dingen zou moeten aanpassen. Sja, als je nooit nadenkt hoe je dit op een indirecte manier voor elkaar krijgt dan zul je dus inderdaad elke keer alle bestanden in moeten duiken om deze hard coded meuk aan te passen.

Maar wat nu als je eens gaat nadenken over hoe je dit wel op een indirecte manier regelt waarbij je dus hard coding vermijdt? Je zou bijvoorbeeld een soort van INSERT-methode kunnen maken voor je database/informatiedrager (wat deze ook moge zijn, dit abstraheer je uit je code). Het daadwerkelijk uitvoeren zit dan in de implementatie van deze code, en niet meer in de lopende code van deze "scripts".

Super simpel voorbeeld:
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
class MyDB {
    protected $db;

    public function __construct($options) {
        $this->db = new mysqli(...); // use $options
        $this->db->set_charset(...); // preferred charset
    }

    public function insert($table, $args) {
        $sql  = 'INSERT INTO '.$table.' (';
        $sql .= implode(', ', array_keys($args));
        $sql .= ') VALUES (';
        $sql .= implode(', ', $this->quote($args));
        $sql .= ')';
        // echo '<pre>'.$sql.'</pre>';
        $this->db->query($sql);
    }


    public function insertId() {
        return $this->db->insert_id;
    }


    protected function quote($args, $escape=true) {
        $out = array();
        foreach ($args as $v) {
            $out[] = "'".($escape ? $this->escape($v) : $v)."'";
        }

        return $out;
    }


    public function escape($arg) {
        return $this->db->real_escape_string($arg);
    }
}

?>

Nu, het enige wat in je "lopende code" staat is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$db
->insert($this->options['db_table'], array(
    'account'   => $this->options['account'],
    'users__id' => $this->options['id'],
    'filename'  => $file->name,
    'mainimage' => $file->mainimage,
));

$file->id = $db->insertId();

return $file;
?>


Als er nu iets in database-land verandert hoef je enkel de IMPLEMENTATIE van de insert() methode aan te passen, en hoef je echt helemaal 0,0 te veranderen in al die 2000 bestanden zelf.

Laat dit ff bezinken.

Ik denk dat hiermee al vrij duidelijk is dat het gebruik van een wrapper gigantische voordelen heeft ten opzichte van alles maar rauw in je code duwen...

Sylvester vader op 11/09/2019 19:28:15:
ach het werkt allemaal weer gelukkig daar gaat het om

Simpelweg omdat iets werkt maakt het nog niet juist.
 
Sylvester vader

sylvester vader

13/09/2019 00:46:50
Quote Anchor link
aaaaaaa hoofdpijnnnnnnn :P dit is nog chinees voor mij maar ik snap het wel

en inderdaad eerst gebruikte ik mysql_query(...)
echter toen had ik dus al die prepared ergens in het toen login script die ik toen had (wist toen nog niet eens dat dat kon op die manier

toen ik over moest naar mysqli_query(...)
kwam ik erachter dat ik er een db connectie bij moest doen en dit was vroeger met
mysql_query(...) niet nodig
echter omdat ik dus zoveel code had in heel veel paginas lukte het mij niet om dit op normale manier aan te passen doormiddel van een bulk edit

toen vond ik dus die manier van prepared en daarmee kon het wel

probleem is dus dat ik zelf alles moet leren en dus helaas nogsteeds niet alles kan

jij hebt mij nu dit geleerd met dat ene stukje en het klinkt eigenlijk heel simpel (weer iets geleerd) dus in nieuwe versie zal ik het inderdaad waarschijnlijk zo doen :)
dus bij deze bedankt voor de kleine maar wijze les
 
Ivo P

Ivo P

13/09/2019 12:30:25
Quote Anchor link
Thomas van den Heuvel op 11/09/2019 16:11:51:

Nu zou je zeggen "ja maar dat zijn opties die uit het systeem komen, en dus zijn ze veilig" ofzo. Dat klopt misschien wel, maar iedereen die ooit die code ziet zal zich daarvan moeten vergewissen. Je laat mensen dus onnodig nadenken over query-veiligheid, terwijl prepared statements hier juist voor bedoeld zijn!


Ik heb nog wel een voorbeeldje waarom "de waarde komt uit het systeem en is dus veilig" niet opgaat:

Ik heb ooit een bug moeten vinden waarom 1 medewerker nooit een order kon afhandelen, terwijl de rest dat prima kon doen.
Uiteindelijk bleek, dat in de logging de naam van de medewerker geplaatst werd. Was mooier geweest als dat het gebruikers_id was geweest, maar a la.

Deze naam was "veilig" volgens bovenstaande redenatie, maar omdat meneer iets van D'Artagnan heette, ging de query grandioos mis.
 
Sylvester vader

sylvester vader

13/09/2019 15:27:09
Quote Anchor link
ja lol heb ik ook ooit meegemaakt zoiets met een quote :P
altijd leuk in text delen in een script met een soort wysiwyg script
als je dan in de text een quote zette dan voerde hij dus de query niet uit :P

dat heb ik toen gelijk aangepast want dat hielt ook in dat er een inject mogelijk was
maar in het begin snapte ik er niks van :P
 
- Ariën -
Beheerder

- Ariën -

13/09/2019 17:18:15
Quote Anchor link
Ik wou dit toch even delen: Filteren op 'gevaarlijke' steekwoorden is ook nooit een oplossing. :-P

Leuke die ik in het verleden tegen kwam:

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
21
22
23
24
25
26
27
    if((function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc())    || (ini_get('magic_quotes_sybase') && (strtolower(ini_get('magic_quotes_sybase'))!="off")) ){
        stripslashes_deep($_GET);
        stripslashes_deep($_POST);
        stripslashes_deep($_COOKIE);
    }
    
      $locatie = $_SERVER['REQUEST_URI'];
$array = Array();
$array[] = "mysql";
$array[] = "query";
$array[] = ";";
$array[] = "}";
$array[] = "INSERT";
$array[] = "%40";
$array[] = "DROPTABLE";
$array[] = "TRUNCATE";
$array[] = "UPDATE";
$array[] = "DELETE";
$array[] = "WHERE";
foreach($array As $foutbezig)
{
    if(eregi($foutbezig,$locatie))
    {
        echo "Waarschijnlijke SQL injectie! Probeer opnieuw.";
        exit();
    }
}

Dit was bedoeld voor een stationsdatabase van iemand. Laat er toevallig ook een station bestaan wat Purmerend OverWHERE heet ;).. Daar hang je dan.
Gewijzigd op 13/09/2019 17:28:44 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

13/09/2019 17:53:37
Quote Anchor link
Een blacklist is nooit een goede oplossing. Als je een case mist ben je de sjaak.

Quote:
echter omdat ik dus zoveel code had in heel veel paginas lukte het mij niet om dit op normale manier aan te passen doormiddel van een bulk edit

toen vond ik dus die manier van prepared en daarmee kon het wel

Ah, de aloude vertrouwde aardappelstempel. Als je dat op die manier moet doen, is dat vast niet de laatste keer dat je dat op die manier moet doen. Verander dus van aanpak.

Quote:
"de waarde komt uit het systeem en is dus veilig"

Even voor de duidelijkheid: die redenatie klopt dus niet! Je mag er nooit vanuit gaan dat als DATA eenmaal in je systeem zit (die nog steeds afkomstig was van gebruikers) ineens veilig zou zijn. Je zult deze dus altijd zonder uitzondering als "onbetrouwbaar" moeten behandelen. Alle DATA zou dus altijd en overal ge-escaped moeten worden, tenzij je een (gedocumenteerde) reden hebt om dit niet te doen.

Dit werkt ook een stuk eenvoudiger: je hoeft niet langer na te denken of iets veilig is of niet (met bijbehorend gevalsonderscheid voor elke individuele case) als je het gewoon altijd als "onveilig" behandelt.

filter input, escape output
overal, altijd.
Gewijzigd op 13/09/2019 17:54:39 door Thomas van den Heuvel
 



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.