Upload scannen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Leidinggevend Full Stack Developer

Hé jij, nieuwe Pinkcuber! Ga aan de slag bij Pinkcube, online leverancier van promotieartikelen! Een innovatieve organisatie waar extra stappen zetten voor klanten de normaalste zaak van de wereld is. Ambitieus zijn we ook. ‘Naoberschap’ staat bij Pinkcube hoog in het vaandel; we helpen elkaar en iedereen is welkom. Pinkcube is Great Place to Work Certified, erkend leerbedrijf, maatschappelijk betrokken partner van stichting Present en partner van CliniClowns. En misschien wel jouw nieuwe werkgever. Wij zoeken namelijk een enthousiaste: Leidinggevend Full Stack Developer (40 uur, medior/senior) Ben jij klaar om baanbrekende ideeën tot leven te brengen en deel uit te

Bekijk vacature »

Lead Fullstack developer

Functie omschrijving Ben jij een leergierige en ambitieuze junior developer met technische skills? Ben jij op zoek naar een werkgever die jouw de volledige vrijheid geeft om jezelf tot een volwaardige senior te ontwikkelen? Wij zijn op zoek naar een full stack developer die zich bezig wil bezig houden met het uitbreiden en verbeteren van de online webshop. Een onderdeel van jouw werkzaamheden is naast het beheren van de webshop ook om de processen en structuren te stroomlijnen. Werkzaamheden Onderhouden van de webshop (denk aan het bijhouden van de voorraad); Nieuwe functies toevoegen aan de product configurator door middel van

Bekijk vacature »

Full stack Developer / .NET / Angular / Azure

Dit ga je doen Jij gaat je als Full Stack .NET Developer voornamelijk bezighouden met: Het vertalen van concepten naar passende innovatieve en duurzame oplossingen; Het ontwikkelen van bedrijf kritische en gebruiksvriendelijke applicaties voor de internationale markt en intern gebruik; Bouwen aan software om het Internet of Things netwerk te ondersteunen; Het maken en onderhouden van interfaces tussen systemen aan de hand van API's; Het onderhouden en blijven verbeteren van de ontwikkelde software. Hier ga je werken Binnen deze organisatie zal jij als Full Stack .NET Developer een belangrijke rol krijgen en ga je dagelijks de uitdaging aan om maatwerk

Bekijk vacature »

Java developer Zorgsysteem

Dit ga je doen Werken aan het eigen gebouwde zorgsysteem; Verbeteringen maken en toepassen binnen de applicatie; Jij gaat werken aan de Back-end van de applicatie en sporadisch werk je mee aan de Front-end; Samenwerken met andere teams voor een optimaal resultaat; Jij kan 'clean' werken en high quality code schrijven; Jij werkt resultaatgericht. Hier ga je werken De organisatie houdt zich bezig met diverse applicaties met betrekking tot zorgregistratie. Dankzij hun systeem komt alle informatie, omtrent de zorg van een patiënt, op een overzichtelijke en toegankelijke manier samen in één systeem te staan. Op deze manier is deze informatie

Bekijk vacature »

Software Developer (Junior functie)

Functieomschrijving Wij zijn op zoek naar een Software Developer! Sta jij in de startblokken om je carrière te beginnen en kan je niet wachten om toffe software te gaan ontwikkelen? Kortom, ben je onlangs afgestudeerd of sta je op het punt om je papiertje te behalen? Voor een IT dienstverlener dat gespecialiseerd is in Microsoft technologie zijn wij op zoek naar C#.NET Developers. Het bedrijf heeft meerdere klanten in regio Utrecht waar je permanent kan komen te werken. Kom je liever te werken bij een klein softwarebedrijf of bij een groot consultancy bureau? Dat is helemaal aan jou de keuze!

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

Als PHP developer (Symfony) bijdragen aan betere z

Functie Als Medior/Senior PHP developer wordt er een mate van zelfstandigheid verwacht, maar ook dat je goed in een team kunt opereren waar kennis wordt gedeeld en er bijvoorbeeld codereviews plaatsvinden. Kwaliteit staat voorop, mede hierom werken ze bijvoorbeeld zonder echte deadlines in hun sprints. De SaaS-applicatie wordt volledig ontwikkeld in PHP en Symfony. De module bestaat uit een stuk informatie verrijking en intelligentie wat resulteert in een medische check. De logica wordt daarom in de code geïntrigeerd. Je bent onder andere bezig met complexe databases waar meer dan 80.000 medicijnen op verschillende niveaus in staan, die maandelijks worden geactualiseerd.

Bekijk vacature »

C# .NET Software Ontwikkelaar

Functie omschrijving C# .NET Developer gezocht. Ben jij een full stack developer die op zoek is naar een nieuwe uitdaging binnen een leuk snel groeiend bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Developer met ervaring op het gebied van .NET die een organisatie in de regio Arnhem gaat versterken. Jij gaat je binnen dit bedrijf vooral bezighouden met het verbeteren van de functionaliteiten van hun dataplatform. Samen met andere ontwikkelaars denk je mee in oplossingsrichtingen, architectuur en nieuwe technologieën. Als C# .NET Developer binnen dit bedrijf houd je je niet alleen bezig met het verbeteren van

Bekijk vacature »

Back-end Software Developer

Functie omschrijving Ben jij op zoek naar een uitdagende development functie bij een klein gespecialiseerd softwarebedrijf? Wil jij graag hybride werken (combi tussen thuis + kantoor), loop jij warm voor maatwerk software en voel jij je prettig in een informele cultuur? Zoek dan niet verder! Reageer direct! Voor een gewilde werkgever in omgeving Tilburg zoeken wij een back-end software developer met een aantal jaar werkervaring. Je gaat werken voor een klein softwarebedrijf dat gespecialiseerd is in de ontwikkeling van integratiesoftware. Jouw werkzaamheden zien er als volgt uit: In een klein team met 4 ontwikkelaars houd jij je bezig met afwisselende

Bekijk vacature »

Software Developer

Functie omschrijving In deze functie ga je aan de slag met het door ontwikkelen van de interne software. Zij maken gebruik van een CRM, wat door de hele organisatie gebruikt wordt. Andere taken: Je gaat het CRM-systeem door middel van PHP verder ontwikkelen; Verder bouw je verschillende API's en koppelingen tussen systemen; Ook ga je collega's ondersteunen bij vragen over de software en applicaties; Deelnemen aan overleggen met het development team; Bij interesse is er de mogelijkheid om junioren te gaan begeleiden. Bedrijfsprofiel Dit bedrijf is actief binnen de telecombranche. Het hoofdkantoor zit in regio van Den Bosch en er

Bekijk vacature »

PHP Developer

Functieomschrijving Vanuit het hoofdkantoor in omgeving Breda ben je als PHP/Symfony Developer niet alleen gefocust op het ontwikkelen van software. Daarnaast ben je voortdurend bezig met het zoeken naar nieuwe trends en ontwikkelingen die van waarde kunnen zijn voor de efficiëntie van software ontwikkeling. Hieronder een kort overzicht van jouw takenpakket: Het ontwerpen en implementeren van webapplicaties met het Symfony Framework; Het schrijven van een schone en efficiënte codes; Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de eisen van de klant; Onderhouden en updaten van bestaande applicaties die zijn gebouwd met het

Bekijk vacature »

Software Developer Java

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET Developer start jij in een team met 15 developers. In het team is er genoeg senioriteit om ervoor te zorgen dat jij de juiste begeleiding krijgt. Jij begint als eerst alle software pakketten en processen eigen te maken. Vervolgens ga jij deze software programmeren, onderhouden en testen. Ook ga jij research doen naar nieuwe mogelijkheden en zoek jij uit hoe je dit kan implementeren. Jullie werken intern op project basis en afhankelijk van het project werken jullie wel of niet iedere ochtend met een standup. Je gaat als Full stack developer aan de slag en gaat

Bekijk vacature »

Java Developer

Java Developers opgelet! Bij Luminis zijn ze opzoek naar jou. Lees de vacature en solliciteer direct. Luminis is een software- en technologiebedrijf met meerdere vestigingen. Vanuit deze vestigingen werken 200 professionals aan technisch hoogwaardige oplossingen voor klanten zoals KLM, Nike en Bol.com. Ook ontwikkelt Luminis eigen oplossingen op het gebied van cloud, Internet of Things, data intelligence, e-sports en e-learning. Luminis onderscheidt zich door aantoonbaar voorop te lopen in technologie en innovatie. Luminis heeft drie kernpunten die verankerd zitten in alles wat we doen: het omarmen van nieuwe technologie, meesterschap en kennis delen. Functiebeschrijving First things first! Het is belangrijk

Bekijk vacature »

Java developer

Als Java Developer bij Sogeti ben je onderdeel van onze toonaangevende community die bestaat uit ruim 100 gepassioneerde professionals. In teamverband lever je mooie prestaties. Daarmee draag je aan bij de meerwaarde die wij leveren aan onze klanten. Geen werkdag is hetzelfde, je bent voortdurend bezig met het oplossen van allerlei complexe vraagstukken binnen bedrijfskritische systemen. Een voorbeeld hiervan is een cliënt-volgsysteem bij Reclassering Nederland. Andere klanten waar wij onder andere voor werken: KPN, Philips, Nationale-Nederlanden, Kamer van Koophandel, ABN AMRO, Bovemij, Arval en de Politie. Werken bij Sogeti Nieuwe ontwikkelingen volgen we op de voet en delen we binnen de

Bekijk vacature »

04/09/2024 11:08:37
Quote Anchor link
Bij het uploaden van een binair bestand is het een vereiste om de inhoud te valideren, maar ook om het te controleren op eventuele virussen.

Ik werk met Linux, daar heb je ClamAV, met een daemon "clamd" die je via een socket of TCP/IP kunt aanspreken.
De enige library die ik heb kunnen vinden is php-clamav maar die heeft slechts support tot en met PHP 5.5, en niet meer voor 8.3.
Via de exec() gaat veel te traag omdat het seconden duurt voordat de virusscanner is geinitialiseerd. Dat duurt te lang als je meerdere uploads hebt.

Hoe dit het beste aan te pakken?
 
PHP hulp

PHP hulp

29/01/2025 00:59:33
 
- Ariën  -
Beheerder

- Ariën -

04/09/2024 11:26:34
Quote Anchor link
Ik denk dat je een soort van wachtrij moet maken, en de bestanden pas vrij moet geven zodra ze gescand zijn.
In de database geef je dan met een flag aan, dat ze gescand en goedgekeurd zijn.

Misschien helpt het om bij meerdere uploads alles tijdelijk op de server in te zippen en dat weer te scannen? Uiteindelijk hoeft er dan maar één proces van clamav aangeroepen te worden. Maar ik zeg altijd: Meten is weten.
Gewijzigd op 04/09/2024 11:27:13 door - Ariën -
 

04/09/2024 11:41:32
Quote Anchor link
Een wachtrij of zippen is weinig praktisch, liever heb ik dat je via een een UNIX-socket of loopback adapter de daemon opdracht kan geven om de bits en bytes meteen te scannen. Dat zou niet al te ingewikkeld moeten zijn, waardoor je zou verwachten dat er toch al iets voor moet zijn.
Ik heb nog even verder gezocht en kwam tegen phpMussel (ik kan niets met Composer), Cloudmersive (is dat via een API?) en Quahog. Die laatste ziet er het meest simpel uit.
Toch maar eens kijken of daar iets tussen zit?
 
- Ariën  -
Beheerder

- Ariën -

04/09/2024 12:03:14
Quote Anchor link
Maar hoelang duurt het scannen van alle bestanden volgens jou me ClamAV? Ik ben benieuwd of je dat al gemeten hebt?
Maar hoezo zou een wachtrij weinig praktisch zijn? Je wilt geen virussen verspreiden zolang iets nog niet gescand is.
 

04/09/2024 12:13:01
Quote Anchor link
Het duurt 16.4 seconden om clamscan te starten op mijn i9 (13e generatie) laptop met 20 cores en 64GB RAM.
Dat is echt een beetje te veel.

De daemon draait al dus het zou makkelijker zijn om die opdracht te kunnen geven om enkele bestandjes te scannen die in de /tmp worden geupload.

Ik ben even aan het kijken met de code van Quahog en deze SO thread om te kijken of ik er iets simpelers van kan maken.
 
Ward van der Put
Moderator

Ward van der Put

04/09/2024 12:57:36
Quote Anchor link
Om wat voor soort "binaire bestanden" gaat het?
 
- Ariën  -
Beheerder

- Ariën -

04/09/2024 13:17:10
Quote Anchor link
Hoe roep je die clam aan in de CLI?
 

04/09/2024 13:29:15
Quote Anchor link
Ward van der Put op 04/09/2024 12:57:36:
Om wat voor soort "binaire bestanden" gaat het?

Bestanden uit de /tmp map die via HTTP worden geupload door gewone gebruikers en waarvan de metadata in $_FILES staat. Deze bestanden worden via move_uploaded_file() verplaatst naar een 'veilige' map of als BYTEA naar de database geschreven. Vervolgens kunnen de bestanden door andere gebruikers worden gedownload. Wat ik zou willen is dat je voorkomt dat virussen zich via deze weg verspreiden.

- Ariën - op 04/09/2024 13:17:10:
Hoe roep je die clam aan in de CLI?

Met 'clamscan -r testbestand'

Toevoeging op 04/09/2024 14:04:41:

Ik heb het werkend gekregen:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php

declare (strict_types=1);

// Gebaseerd op
// https://github.com/jonjomckay/quahog/tree/master
// https://github.com/clue/socket-raw/tree/1.x


const TIMEOUT = 30;
const CLAMD_SOCKET = '/var/run/clamav/clamd.ctl';
$filename = "/tmp/test.txt";

// Maak socket met timeout in blocking I/O
$socket = @socket_create(AF_UNIX, SOCK_STREAM, 0);
if ($socket === false) { die("Kan geen socket maken"); }
$r = NULL;
$w = [$socket];
$e = NULL;
@
socket_select($r, $w, $e, TIMEOUT, 0);
if (@socket_get_option($socket, SOL_SOCKET, SO_ERROR) === false) {
  die("Kan timeout niet instellen op socket");
}

if (! socket_set_block($socket)) { die("Geen blocking I/O voor socket"); }
if (! @socket_connect($socket, CLAMD_SOCKET)) { die("Kan niet verbinden met ClamAV"); }

// Geef opdracht bestand te scannen
$msg = "SCAN " . $filename;
$buffer = 'n' . $msg . "\n";
@
socket_send($socket, $buffer, strlen($buffer), MSG_DONTROUTE);

// Lees resultaat
$result = null;
do {
  $r = [$socket];
  $n = NULL;
  if (! @socket_select($r, $n, $n, TIMEOUT)) {
    print "Timeout";
    break;
  }

  $data = @socket_read($socket, 4096, PHP_NORMAL_READ);
  if ($data === false) { die("Kan niet lezen van socket"); }
  if ($data === "") { break; }  // geen data meer om te lezen
  $result .= $data;
  if (strcmp(substr($result, -1), "\n") == 0) { break; }
}
while (true);
socket_close($socket);
$result = trim($result);

// Interpreteer resultaat
header("Content-type: text/plain");
if (str_ends_with($result, "OK")) {
  print "Bestand \"" . $filename . "\" is schoon";
}
else if (str_ends_with($result, "FOUND")) {
  print "Bestand \"" . $filename . "\" bevat een virus";
}
else if (str_ends_with($result, "ERROR")) {
  print "Fout bij scannen, zijn de leesrechten goed ingesteld?";
}
else {
  print "Onbekende fout";
}


?>

Met het testbestand roept ClamAV ook dat er een virus is gevonden, test.txt moet dan deze string hebben:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Zie ook https://en.wikipedia.org/wiki/EICAR_test_file
Gewijzigd op 04/09/2024 16:26:10 door
 
Ward van der Put
Moderator

Ward van der Put

06/09/2024 12:06:20
Quote Anchor link
Toch gaaf wat je allemaal met PHP kunt doen. ;-)

https://www.youtube.com/watch?v=WsnHWxO7Krw
 

06/09/2024 16:18:15
Quote Anchor link
Ward van der Put op 06/09/2024 12:06:20:
Toch gaaf wat je allemaal met PHP kunt doen. ;-)

https://www.youtube.com/watch?v=WsnHWxO7Krw

Het is dat je die knipogende smiley er achter zet, anders zou ik nog geneigd zijn om inhoudelijk te reageren.

Maar die video vraagt gewoon om een reactie (ook al zit de criticus er bij). =]

Ik denk niet dat die video een goede promotie is van PHP, een (ex-)accountant vertelt over hoe gaaf PHP wel is en wat je er mee kunt doen. En natuurlijk is het zo dat je in principe van alles in PHP kunt doen, maar de vraag is niet OF het iets kan, maar HOE GOED:

- types zijn nog steeds niet echt handig in PHP, als je een int hebt en je increment die te vaak wordt het vanzelf een float. En functies zijn hoofdletterongevoelig, in tegenstelling tot variabelen. De volgorde waarin je variabelen in standaardfuncties zet is nog steeds verwarrend. En je kunt nog steeds functies callen met meer variabelen dan er in passen.
Neem nou deze code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php function x() : int { return PHP_INT_MAX + 1; } ?>

Waarom pas een error bij het aanroepen van de functie? PHP kan toch meteen weten dat het fout gaat?

- traits zijn leuk, en gelukkig zijn er tools in IDE's die je helpen enkele fouten te voorkomen. Maar traits zijn lang niet zo krachtig als in... een andere taal. Je kunt ze in PHP helaas niet gebruiken als types van een functieargument. Hoe ondersteunt PHP dan compositie? Alleen maar met traits als een geautomatiseerde copy-paste?

- syntax suger als array destructioning en anonymous classes, generators en closures en de coalesce operator en named arguments scheelt ietsje voor de snelheid van programmeren, maar niet genoeg om daar nou een punt van te maken. Code wordt zelfs gevoeliger voor menselijke fouten door de null chaining operator, het feit dat && iets anders betekent dan 'and' etc.
Het zou handiger zijn als ze PHP beter te volgen maken, zoals geen haakjes bij elk if-statement. Daar heeft iedereen meteen iets aan.
In plaats daarvan komen ze met extra rommel als dat je bij een contructor een type "public readonly" kan noemen. Waarom niet gewoon "protected"? Maar ze voegen die onzin liever toe om hip over te komen.

- 'match' heeft potentie, maar PHP helpt je nog steeds niet met het afvangen van fouten. Deze code geeft gek genoeg geen error:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
enum MyFirstEnum { case A; case B;
  function
print() { return match ($this) { Self::A => 'A' }; }
}
?>

Je zou toch verwachten dat PHP met minimaal een warning aangeeft dat ik Self::B ben vergeten?

- Wat wel een echte verbetering is, is dat je variabelen kan annoteren dat de gegevens niet gelogd worden. Al heb je daar weinig aan als de webserver ook je wachtwoord opslaat in de HTTP-logging. Of als je je wachtwoord doorstuurt naar de database om het daar pas te decrypten.

Alle echte grote problemen die PHP heeft zijn nog steeds niet opgelost: de afhankelijkheid van configuratie of en hoe iets überhaupt werkt, het gemak waarmee je inefficiënte programma's die slecht te onderhouden zijn maakt en dat er geen duidelijke errors zijn wanneer er dingen niet goed werken terwijl je er van uit gaat dat ze dat wel zouden doen.

Het maakt dat PHP nog steeds complexiteit verbergt waardoor je vaak niet zeker bent of je code goed is, terwijl wel (in een aantal gevallen) lijkt te werken.
En het andere punt, omdat PHP nog verre van perfect is, is zelfs een minor update van 8.2 naar 8.3 weer een major update met weer opnieuw breaking changes. Elke verbetering van PHP gaat elk jaar weer ten koste van je eigengeschreven code!
Mocht je afhankelijk zijn van een library van iemand die niet werkt met de nieuwe PHP, dan zit je met de gebakken peren. En je mag zowieso je eigen codebase weer nalopen (of zelfs unit-tests schrijven of een int een int blijft, en dat soort tijd die je beter aan het leren kennen van serieuzer gereedschap had kunnen besteden.)


In ieder geval had ik in Rust zo een library die meteen met ClamAV scant. En die library blijft het gegarandeerd doen, ook over 10 jaar.
Dat soort dingen en bovengenoemde is het verschil met andere talen. En de reden waarom ik de resterende sites op termijn ook over ga zetten naar Rust.
Tenzij PHP bijdraait. Maar dat zie ik niet snel gebeuren, daarvoor moet er te veel veranderen. En hoe meer onzin er wordt toegevoegd aan PHP hoe lastiger het wordt om dat te verbeteren.
 



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.