header info mee sturen voor path

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marcel d

marcel d

17/04/2023 19:26:50
Quote Anchor link
Ik zit even met een dingetje die ik niet kan terug vinden op het forum en hoop hier een antwoord te mogen ontvangen. Vanuit een applicatie kan ik bestand uploaden naar een php upload bestand (plaats ik hieronder), dat werkt prima zonder problemen. Nu kan ik in deze applicatie weinig veranderen, wel de headers die meegestuurd aanpassen en een toevoegen, wat ik wil is dat het upload/ path aangepast word afhankelijk van de header, voorbeeld: er word een header mee gestuurd met header('Location: 'ditiseentest); dan zou het bestand wat gepload worden moeten worden geplaatst in de map: $upload_path = 'upload/ditiseentest/'; // mappen zijn aanwezig en hoeven niet worden aangemaakt.

Zijn hier wat voorbeelden van of uitleg van iemand mij hierin kan helpen?

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
62
63
64
<?php


header("Acess-Control-Allow-Origin: *");
header("Acess-Control-Allow-Methods: POST");
header("Acess-Control-Allow-Headers: Acess-Control-Allow-Headers,Content-Type,Acess-Control-Allow-Methods, Authorization");

$data = json_decode(file_get_contents("php://input"), true); // collect input parameters and convert into readable format
    
$fileName  =  $_FILES['file']['name'];
$tempPath  =  $_FILES['file']['tmp_name'];
$fileSize  =  $_FILES['file']['size'];
        
if(empty($fileName))
{

    $errorMSG = json_encode(array("message" => "please select image", "status" => false));    
    echo $errorMSG;
}

else
{
    $upload_path = 'upload/'; // set upload folder path
    
    $fileExt = strtolower(pathinfo($fileName,PATHINFO_EXTENSION)); // get image extension
        
    // valid image extensions

    $valid_extensions = array('jpeg', 'jpg', 'png', 'gif');
                    
    // allow valid image file formats
    if(in_array($fileExt, $valid_extensions))
    {
                
        //check file not exist our upload folder path
        if(!file_exists($upload_path . $fileName))
        {

            // check file size '5MB'
            if($fileSize < 5000000){
                move_uploaded_file($tempPath, $upload_path . $fileName); // move file from system temporary path to our upload folder path
            }
            else{        
                $errorMSG = json_encode(array("message" => "Sorry, your file is too large, please upload 5 MB size", "status" => false));    
                echo $errorMSG;
            }
        }

        else
        {        
            $errorMSG = json_encode(array("message" => "Sorry, file already exists check upload folder", "status" => false));    
            echo $errorMSG;
        }
    }

    else
    {        
        $errorMSG = json_encode(array("message" => "Sorry, only JPG, JPEG, PNG & GIF files are allowed", "status" => false));    
        echo $errorMSG;        
    }
}

        
// if no error caused, continue ....
if(!isset($errorMSG))
{

    $query = mysqli_query($conn,'INSERT into tbl_image (name) VALUES("'.$fileName.'")');
            
    echo json_encode(array("message" => "Image Uploaded Successfully", "status" => true));    
}


?>
 
PHP hulp

PHP hulp

02/03/2024 21:46:34
 
- Ariën  -
Beheerder

- Ariën -

17/04/2023 19:50:38
Quote Anchor link
Wordt de locatie bepaald via een HTTP-header? Dan kan je die achterhalen met getallheaders() die een array teruggeeft.

Verder is het access met twee c's en twee s'en!

Toevoeging op 17/04/2023 19:56:15:

En denk ook aan SQL-injection preventie!
 
Marcel d

marcel d

17/04/2023 20:04:42
Quote Anchor link
thanks, zijn hier voorbeelden van of uitleg hier op de forum? kan zelf zo niet vinden, ook google laat niet zo gek veel zien, dan je wel
 
Ozzie PHP

Ozzie PHP

17/04/2023 20:10:43
Quote Anchor link
https://www.php.net/getallheaders

Staat ook een voorbeeldje bij.
 
Ivo P

Ivo P

18/04/2023 09:07:03
Quote Anchor link
Wat doe je met $data?

het suggereert dat je op een heel basic-manier de data probeert in te lezen, maar vlak daarna gebruik je toch $_FILES.
Waarom dan niet ook een $_POST['path'] waarin je een voorkeurspath op kunt geven?

Je kúnt natuurlijk een header gebruiken, en daarmee blokkeer je eventueel misbruik van je upload script, maar dat is wat lastiger.
 
Marcel d

marcel d

18/04/2023 12:12:11
Quote Anchor link
Nou ik ben het een en ander aan leren/onderzoeken hoe het een en ander werk, dit zal ongetwijfeld een goede keuze zijn, voor mij nieuw in ieder geval. Vanuit de applicatie kunnen gebruikers een bestanden uploaden maar komt voor ieder in een aparte map, vandaar ik nu zoek naar een mogelijk oplossing. Het is puur hobby en ben niet zo erg ervaren hierin maar des te leuker om het een en ander te gaan onderzoeken en proberen. Wel kan in body nog wat mee sturen, een id van deze software bijvoorbeeld. Ontzettend bedankt voor de info, ik ga er mee verder stoeien.
 
Adoptive Solution

Adoptive Solution

18/04/2023 12:29:19
Quote Anchor link
Als elke gebruiker een eigen map heeft, dan weet je de naam van die map toch al op voorhand.
Kan zijn : naam, id, klantnummer, een ander uniek nummer, etc.
 
Ivo P

Ivo P

18/04/2023 12:33:48
Quote Anchor link
Je wilt sowieso niet dat elke klant zelf zijn map-naam kiest:
Dan heb je er zo een paar die hun map "mijn-foto's" noemen, of "marcels-documenten".

Daarbij wil je waarschijnlijk ook niet dat mensen tekens als ' of / in hun mapnaam opnemen.

of iets als "../../../etc/httpd/httpd.conf/"
 
Adoptive Solution

Adoptive Solution

18/04/2023 12:44:52
Quote Anchor link
De klant hoeft niet te kiezen.
De naam heeft ie opgegeven toen ie klant werd.
En de leestekens haal je er uit.
 
Marcel d

marcel d

18/04/2023 13:53:34
Quote Anchor link
Klopt, als men de applicatie start moet men eerst haar/zijn naam invoeren, deze naam komt overeen met de map achter upload/
echter men kan zelf niet in de applicatie doen of aanpassen, de naam word mee gestuurd bij het uploaden van bestanden, dus het komt hier op de PHP pagina aan. nu is voor mij even uitzoeken, hoe koppel in de naam, die gestuurd is zodanig aan de php script dat hij niet naar upload/ zijn bestanden plaats maar naar upload/naam waarbij naam de naam van de persoon is zijn naam eerder heeft opgegeven. dat is een beetje de bedoeling.
 
- Ariën  -
Beheerder

- Ariën -

18/04/2023 14:09:36
Quote Anchor link
Ik snap niet wat de header ermee te maken heeft? Of gaat het via een API waarmee de gebruiker zich via een header identificeert?

Je kan toch voor in move_uploaded_file() een pad defineren.
$target_dir = "uploads/".$username."/";
 
Marcel d

marcel d

18/04/2023 15:16:42
Quote Anchor link
Het gaat hier o soort van ai inderdaad, of het is een api, ken der werkelijke verschillen niet. De header is enige wat ik kan aanpassen / iets mee sturen / naar de upload.php pagina, ik kan target_dir="uploads/".$username */* wel aanpassen in de upload.php pagina maar er zal toch van een $username vanuit de applicatie naar de php gestuurd moeten worden. Ik weinig dan alleen de header aansturen richting de php pagina.
 
- Ariën  -
Beheerder

- Ariën -

18/04/2023 16:30:54
Quote Anchor link
Ken je juiste termen, want AI en API zijn twee totaal verschillende dingen:

AI is artificiële intelligentie, ook of kunstmatige intelligentie genoemd, en waar ChatGP bekend om is.
API is 'application programming interface' wordt gebruikt om op een geformaliseerde manier gegevens uit te wisselen tussen sites/app's. Zoals je bijvoorbeeld bij OpenWeatherMap het weer uit Paramaribo kan ophalen, en kan gebruiken op je eigen website/app.

Maar er is al hier de functie getallheaders() genoemd om HTTP headers uit te kunnen lezen. Heb je daar al naar gekeken?
De variabele $username is in mijn voorbeeld niet gedefinieerd, maar met die genoemde functie kan je de username uit de header() ophalen, en daarin verwerken.
 
Ozzie PHP

Ozzie PHP

18/04/2023 16:37:05
Quote Anchor link
Hoe weet de website wie er is ingelogd?
 
- Ariën  -
Beheerder

- Ariën -

18/04/2023 16:44:57
Quote Anchor link
Zoals ik begrijp is er sprake van een API om een upload te laten plaatsvinden.

Om iemand te identificeren, zou dit gebruikt kunnen worden:

$key = getallheaders()['API-Key'];

Ik neem aan dat de header dan bijvoorbeeld API-Key heet, en geen Username. Iemand die de API zelf aanroept kan anders eenvoudig met de naam 'pietje' onder iemand anders zijn naam foto's uploaden, wat ongewenst is. Een unieke sleutel is beter, daaraan kan weer geïdentificeerd worden om wie het gaat, en in welke map de foto's geplaatst worden. En een unieke sleutel raad je ook niet.

Je kan eventueel nog iets een controle inbouwen om dergelijke brute-force acties te detecteren en het IP tijdelijk te blokkeren.
Gewijzigd op 18/04/2023 17:01:33 door - Ariën -
 
Ozzie PHP

Ozzie PHP

18/04/2023 18:06:51
Quote Anchor link
Heej Aar (leuke balonnen!), de vraag was eigenlijk bedoeld voor Marcel. Hij werkt met die API, dus ik neem aan dat hij dan toch weet hoe hij een klant identificeert?
 
- Ariën  -
Beheerder

- Ariën -

18/04/2023 18:42:19
Quote Anchor link
Ja, dat snap ik. Ik lees wat van hem over headers, en ik denk dan aan een API-key achtige constructie.

En die ballonnen heb ik zelf gemaakt. Ik ben in mijn hobby ook beginnend ballonkunstenaar.
Poedels, beertjes, bloemetjes, leuke hoeden of armbandjes. Ik kan ze vouwen :-D
Gewijzigd op 18/04/2023 18:43:54 door - Ariën -
 
Ozzie PHP

Ozzie PHP

18/04/2023 21:53:18
Quote Anchor link
Geinig hoor! Da's weer wat anders dan achter de computer zitten :-)
 
Ivo P

Ivo P

18/04/2023 22:37:04
Quote Anchor link
als de documenten die geupload worden weer geopend kunnen worden in een site, bijvoorbeeld als iemand daar zijn profielfoto neer mag zetten, dan verraad je daarmee direct de api-key.

Dat is dus niet handig.

Ik zou die 2 los van elkaar halen.
API key is goed, en die kun je gebruiken om te achterhalen wie er nu blijkbaar iets wil uploaden.
Dan heb je
- zijn naam
- zijn userid
- zijn status (mag uploaden; is niet gebanned; is niet verwijderd etc)
- zijn uploadpath

Dat uploadpath mag desnoods best een uuid zijn: uniek en niet (echt) voorspelbaar.

De simpele benadering is inderdaad "stuur een 'key' mee en dat is je path" maar dan heb je dus geen idee wie dat is en of hij wel mag uploaden. (en of hij niet 24GB per dag je server op pompt)
 



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.