Upload scannen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

SQL Database Ontwikkelaar

Functie omschrijving Kan jij goed overweg met complexe algoritmes en het schrijven van procedures in T-SQL? Heb jij al wat ervaring opgedaan met SQL en vind je het tijd voor de volgende stap? Lees dan snel verder! Dit software bedrijf, gespecialiseerd in de ontwikkeling van logistieke software, is op zoek naar een ervaren SQL database developer. Jouw werkzaamheden zullen onder andere bestaan uit: Je houdt je bezig met het ontwerp en de ontwikkeling van MS SQL server databases, dit doe je met T-SQL als programmeer laag. De begeleiding van projecten van A tot Z, je zult aansluiten bij meetings met

Bekijk vacature »

C# Developer Research and Development - Delft

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Delft Vacature ID: 6307 Introductie C# Developer Research and Development - Delft - Onze klant is één van de meest innovatieve bedrijven in de region van Delft. Op dit moment zijn ze voor het innovatie centrum. In het innovatie centrum wordt gewerkt aan de nieuwste technieken voor navigatie software. R&D / C# / Pattern Recognition / Algorithms / 3d Data / DotNET Functieomschrijving Als C# Developer kom je te werken in een innovatief scrumteam. We ontwikkelen en door ontwikkelen de nieuwste technieken op het gebied van navigatie software. Deze software wordt onder andere

Bekijk vacature »

Java developer

Functie Je gaat aan de slag als Tester voor een aantal mooie projecten. Je komt terecht in een DevOps team waar jij aan de slag gaat om de kwaliteit te waarborgen omtrent de maatwerk software voor de klanten. Je draait je hand er niet voor om de adviserende rol te bekleden op het gebied van testautomatisering en het opzetten van testframeworks. Zoals aangegeven ga je daadwerkelijk in het eigen team aan de slag en is het daarnaast ook gebruikelijk bij de klanten op locatie te komen om te werken aan de opdrachten. Je krijgt zodoende echt een mooie kijk in

Bekijk vacature »

Gezocht: Ervaren VB6 developer met C# ambitie!

Bedrijfsomschrijving Dit bedrijf is een vooraanstaande softwareleverancier die gespecialiseerd is in het ontwikkelen van software pakketten voor autoschade herstel bedrijven. De software wordt gebruikt door meer dan de helft van alle autoschade herstel bedrijven in Nederland. Het team van professionals is op zoek naar getalenteerde collega developers die hun vaardigheden willen inzetten om het bedrijf te laten groeien. Functieomschrijving Voor dit bedrijf zoek ik een ervaren VB6 / VB.NET developer met interesse om op termijn verder te gaan in C#. In deze functie ben je verantwoordelijk voor het onderhouden van de bestaande softwarepakketten. Een deel van de code is nog

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET developer start jij in een development team met twee ervaren software ontwikkelaars. Jouw persoonlijke ontwikkeling is voor ons erg belangrijk en jij gaat dan ook meelopen met onze Senior .NET ontwikkelaar die jou met zijn kennis en ervaring een goede begeleiding kan aanbieden. Als team zijn jullie verantwoordelijk voor het schrijven van software voor onze toonaangevende Automatiseringssystemen. Jij gaat aan de slag met de onderhoud van de kernsoftware, ondersteund de software van derden door het gebruik van onze webservices en als team zijn jullie verantwoordelijk voor het ontwikkelen van onze backend oplossingen. Wij maken op dit

Bekijk vacature »

Traineeship ICT regio Amsterdam/Utrecht

Wat ga je doen? Het traineeship begint met een fulltime maand cursussen en praktijkdagen, waarin je de basis van het IT-vak leert op de Shared Servicedesk (SSD). Daarnaast ga je meteen aan de slag voor je eerste certificering! (ITILv4). Je start in een groep met 4 tot 10 deelnemers, waarmee jij gedurende die maand optrekt en je kennis kunt delen. Na het voltooien van de eerste maand ga je direct voor een langere periode aan de slag bij één van onze klanten of blijf je intern bij ons op de Shared Servicedesk. Je bent het eerste aanspreekpunt van de eindgebruikers

Bekijk vacature »

PHP/Symfony developer

Functieomschrijving Vanuit het hoofdkantoor in omgeving Bergen op Zoom ben je als PHP/Symfony Developer niet alleen bezig met software ontwikkeling. Je bent buiten ontwikkeling ook continu bezig met het zoeken naar nieuwe trends en ontwikkelingen die van waarde kunnen zijn voor de efficiëntie van software ontwikkeling. Techstack: PHP, Symfony & mySQL. Jouw takenpakket ziet er als volgt uit: Het ontwerpen en implementeren van webapplicaties met het Symfony-framework; Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de eisen van de klanten; Het schrijven van een schone en efficiënte code volgens het Symfony framework; Onderhouden

Bekijk vacature »

Software Programmeur

Functie omschrijving Ben jij op zoek naar een organisatie waar je samen met een team werkt aan iets moois en waar je naast hard werken ook hard kunt lachen? Dan ben je hier aan het juiste adres! Voor een informeel IT-bedrijf in omgeving Wassenaar zijn wij op zoek naar versterking. Ben jij op zoek naar een nieuwe uitdaging als Software Programmeur lees dan snel verder! Werkzaamheden Programmeur Je bent bezig met het ontwikkelen van software en webapplicaties. Je kunt technische klussen uitvoeren op locatie. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een project goed

Bekijk vacature »

Softwareontwikkelaar Cleopatra

Functieomschrijving: De directie Verkeer en Openbare ruimte van de gemeente Amsterdam beschikt over een softwareapplicatie, "Cleopatra", waarmee geautomatiseerde handhaving plaatsvindt (op basis van kentekenherkenning) van bepaalde gebieden waarin toegangseisen worden gesteld aan het verkeer. Voorbeelden ervan zijn de milieuzones, de zone zwaar verkeer, handhaving van bromen snorfietser op het fietspad en autoluwe gebieden. Voor de doorontwikkeling en uitbreiding ervan zijn gespecialiseerde softwareontwikkelaars nodig die helpen bij het programmeren van de handhavingsmodules voor nieuwe gebieden en het verbeteren en bijwerken van de bestaande onderdelen van de softwareapplicatie.De opdracht bestaat uit: het programmeren van de diverse modules;het tijdens demo's tonen van de

Bekijk vacature »

IoT Developer

Ben jij innovatief, heb jij passie voor energie en ben je data gedreven? Bouw dan mee aan IoT binnen Bredenoord. Samen met een gedreven team werk jij aan mooie technische en innovatieve oplossingen. Wat houdt de functie van IoT Developer in? Binnen Bredenoord zijn wij momenteel volop in ontwikkeling met ons IoT platform. Als uitbreiding van ons team zijn wij op zoek naar een IoT Developer. Je zal in projectverband meehelpen met het implementeren van IoT vraagstukken binnen Bredenoord. Als IoT Developer op onze R&D-afdeling word je verantwoordelijk voor het verder inrichten en beheren van ons nieuwe IoT platform. Dat

Bekijk vacature »

Fullstack Software Developer

Functieomschrijving Voor een ambitieuze werkgever in regio Roosendaal zijn wij op zoek naar een Full Stack C#.NET Developer. Als software programmeur ben je verantwoordelijk voor het bouwen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere developers en engineers om de sensoren in machines uit te lezen en deze data om te zetten in management informatie voor jullie klanten. Taken en verantwoordelijkheden: Verder ontwikkelen en onderhouden van webapplicaties, dashboards en apps voor de eigen IOT-oplossingen; Testen en goedkeuren van de software; Je gaat aan de slag met de volgende technologieën en frameworks: C#, JS frameworks,

Bekijk vacature »

Lead Webdeveloper

As Lead Web Developer at KUBUS you are responsible for the implementation design of requirements and the software architecture of the web application and services of BIMcollab. In your role as lead developer you will naturally search for the optimum between the required implementation time, the performance of the application and a fast go-to-market of features, in line with our automated test and release train. Together with the other senior developers in your team you monitor the architecture of the application and you advise the product owner about necessary refactoring to improve the maintainability of the platform. Our development team

Bekijk vacature »

.NET developer

Functie Als .NET developer start jij in een ontwikkelteam met 15 developers en twee testers. Samen zijn jullie verantwoordelijk voor financiële applicaties met meer dan 50.000 gebruikers. Een deel van het team is verantwoordelijk voor de webapplicaties van deze organisatie. Ook zijn er twee app ontwikkelaars werkzaam in het team die zich focussen op de mobiele applicatie. Als .NET ontwikkelaar ga jij aan de slag met de webapplicaties van deze organisatie. Hierbij maak jij o.a. gebruik van C# .NET, ASP.NET, T-SQL, Angular en TypeScript. De nadruk van jouw functie ligt wel op de backend van de applicatie. Wat jouw functie

Bekijk vacature »

Laravel developer

Zie jij mogelijkheden om onze tooling technisch te verbeteren en uit te bouwen? Over Jobmatix Jobmatix is een innovatieve en internationale speler op het gebied van jobmarketing. Onze jobmarketing automation tool helpt organisaties bij het aantrekken van nieuw talent door vacatures digitaal, geautomatiseerd en op een efficiënte manier te adverteren en onder de aandacht te brengen bij de doelgroep op 25+ jobboards. Volledig performance-based, waarbij organisaties betalen op basis van cost per click of cost per applicant. Maandelijks wordt onze jobmarketing automation tool al gebruikt door vele directe werkgevers, intermediairs en mediabureaus, waaronder Picnic, Rijkswaterstaat, AdverOnline, Schiphol, DPA, Teleperformance en

Bekijk vacature »

.Net ontwikkelaar - Het schoolsysteem verbeteren!

Bedrijfsomschrijving Onze klant is een prettige en kleinschalige organisatie waar hard gewerkt wordt om het onderwijs te verbeteren. Daarom werken ze aan complexe om administratieve, financiële en facilitaire processen te versnellen en te verbeteren. Dit doen ze vanuit een platte organisatie voor klanten die door geheel Nederland verspreid zitten, hier horen vanzelfsprekend een aantal aansprekende HBO scholen en universiteiten toe. Functieomschrijving Je komt terecht in een organisatie waar op dit moment 2 scrumteams werken. Jij zal als .Net developer binnen 1 van deze scrumteams functioneren, iedereen binnen dit team heeft zijn/haar eigen expertise waardoor er met verschillende invalshoeken aan een

Bekijk vacature »
Ad Fundum

Ad Fundum

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

16/09/2024 21:02:17
 
- 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 -
 
Ad Fundum

Ad Fundum

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.
 
Ad Fundum

Ad Fundum

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?
 
Ad Fundum

Ad Fundum

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 Ad Fundum
 
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
 
Ad Fundum

Ad Fundum

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.