header info mee sturen voor path
Zijn hier wat voorbeelden van of uitleg van iemand mij hierin kan helpen?
Code (php)
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
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));
}
?>
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));
}
?>
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!
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
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.
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.
Kan zijn : naam, id, klantnummer, een ander uniek nummer, etc.
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/"
De naam heeft ie opgegeven toen ie klant werd.
En de leestekens haal je er uit.
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.
Je kan toch voor in move_uploaded_file() een pad defineren.
$target_dir = "uploads/".$username."/";
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.
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.
Hoe weet de website wie er is ingelogd?
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 -
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?
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 -
Geinig hoor! Da's weer wat anders dan achter de computer zitten :-)
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)