Vaste hardcode security
Ik wil dat als een soort hardcode wegzetten in een script, op moment heb ik het opgelost met een stukje code zoals dit.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if($_GET['Name'] == 'persoon1') {
echo you cannot delete this acount
}else{
<a href='index.php?menu=profile&action=delete&id=".$_GET['ID']."'>Delete</a>
if($_GET['Name'] == 'persoon2') {
echo you cannot delete this acount
}else{
<a href='index.php?menu=profile&action=delete&id=".$_GET['ID']."'>Delete</a>
if($_GET['Name'] == 'persoon3') {
echo you cannot delete this acount
}else{
<a href='index.php?menu=profile&action=delete&id=".$_GET['ID']."'>Delete</a>
}
?>
if($_GET['Name'] == 'persoon1') {
echo you cannot delete this acount
}else{
<a href='index.php?menu=profile&action=delete&id=".$_GET['ID']."'>Delete</a>
if($_GET['Name'] == 'persoon2') {
echo you cannot delete this acount
}else{
<a href='index.php?menu=profile&action=delete&id=".$_GET['ID']."'>Delete</a>
if($_GET['Name'] == 'persoon3') {
echo you cannot delete this acount
}else{
<a href='index.php?menu=profile&action=delete&id=".$_GET['ID']."'>Delete</a>
}
?>
Ik weet dat dit opslachtig is, dus ik zoek hier een oplossing voor.
Hoe kan ik dit in een kosrter script zetten als hardcode?
Heb het geprobeerd met variabelen en merge_arry, maar dat werkte niet.
Hoe kan ik dit oplossen volgens jullie?
Wat je wilt niet dat er namen in een script naar boven komen.
Anders had je ook in_array() kunnen gebruiken en alle userID's in een array kunnen gieten.
Maar goed: een databaseveld is veel handiger.
Gewijzigd op 08/06/2022 17:02:06 door - Ariën -
ik had ook arry gebruikt en die met array_merg gedaan, maar dat deed niks.
Maar ik kan die optie van jou altijd nog gebruiken, maar zie zoiets liever als een stukje hardcode.
zodat niemand de namen kan acterhalen etc...
Met een vlag aangeven of de gebruiker uit de database of uit een array gehaald moet worden.
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
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
<?php
function pc_validate( $user, $password, $db_true )
{
if( $db_true )
{
// use next 2 lines to connect to database
include ('connect-with-login.php');
//echo '<p>Resultaat = ' . $resultaat . '</p>';
//exit();
return $resultaat;
}
else
{
// use next lines to use the $users array
// md5 passwords are the same as usernames
$users = [
'david' => '172522ec1028ab781d9dfd17eaca4427',
'adam' => '1d7c2923c1684726dc23d2901c4d8157',
'test' => '098f6bcd4621d373cade4e832627b4f6',
];
if ( isset( $users[$user] ) && ( $users[$user] == md5($password) ) )
{
return TRUE;
}
else
{
return FALSE;
}
}
}
?>
function pc_validate( $user, $password, $db_true )
{
if( $db_true )
{
// use next 2 lines to connect to database
include ('connect-with-login.php');
//echo '<p>Resultaat = ' . $resultaat . '</p>';
//exit();
return $resultaat;
}
else
{
// use next lines to use the $users array
// md5 passwords are the same as usernames
$users = [
'david' => '172522ec1028ab781d9dfd17eaca4427',
'adam' => '1d7c2923c1684726dc23d2901c4d8157',
'test' => '098f6bcd4621d373cade4e832627b4f6',
];
if ( isset( $users[$user] ) && ( $users[$user] == md5($password) ) )
{
return TRUE;
}
else
{
return FALSE;
}
}
}
?>
En als je niet wilt dat de database gehackt wordt, zorg er dan voor dat ze er niet bijkunnen.
Arno van Zanten op 08/06/2022 17:14:56:
is ook een idee, maar ook dbases kunnen ook gehackt worden
FTP ook!
En anders misschien via een SQL-exploit.
Quote:
ik had ook arry gebruikt en die met array_merg gedaan, maar dat deed niks.
Maar ik kan die optie van jou altijd nog gebruiken, maar zie zoiets liever als een stukje hardcode.
zodat niemand de namen kan acterhalen etc...
Maar ik kan die optie van jou altijd nog gebruiken, maar zie zoiets liever als een stukje hardcode.
zodat niemand de namen kan acterhalen etc...
Een site wil je altijd flexibel houden. Daar hoort geen hardcoded hack in.
Achterhalen kunnen ze altijd als het in de database staat, en als ze op een manier een toegang vinden.
Gewijzigd op 08/06/2022 17:27:18 door - Ariën -
Misschien een persoonlijk idee maar ik sta nooit toe dat een gebruiker zichzelf wist.
gewoon in het delete commando "where id<>' . $_SESSION['id'] of een equivalent toevoegen
Ik laat ook nooit toe dat een laatste beheerder verwijderd wordt.
En JaJa ik weet via de database kan natuurlijk alles :)
Arno van Zanten op 08/06/2022 16:48:09:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if($_GET['Name'] == 'persoon1') {
echo you cannot delete this acount
}else{
<a href='index.php?menu=profile&action=delete&id=".$_GET['ID']."'>Delete</a>
if($_GET['Name'] == 'persoon2') {
echo you cannot delete this acount
}else{
<a href='index.php?menu=profile&action=delete&id=".$_GET['ID']."'>Delete</a>
if($_GET['Name'] == 'persoon3') {
echo you cannot delete this acount
}else{
<a href='index.php?menu=profile&action=delete&id=".$_GET['ID']."'>Delete</a>
}
?>
if($_GET['Name'] == 'persoon1') {
echo you cannot delete this acount
}else{
<a href='index.php?menu=profile&action=delete&id=".$_GET['ID']."'>Delete</a>
if($_GET['Name'] == 'persoon2') {
echo you cannot delete this acount
}else{
<a href='index.php?menu=profile&action=delete&id=".$_GET['ID']."'>Delete</a>
if($_GET['Name'] == 'persoon3') {
echo you cannot delete this acount
}else{
<a href='index.php?menu=profile&action=delete&id=".$_GET['ID']."'>Delete</a>
}
?>
Je verwijdert iemand op basis van ID, maar je voert een controle uit op basis van naam ... hmmm
DELETE FROM user WHERE id = 123;
maar door
UPDATE user SET deleted = 1 WHERE id = 123;
Op deze manier is een delete-actie eenvoudig terug te draaien. En je hebt geen problemen met andere tabellen waarin de posts, bestellingen, profielen, vrienden etc staan. Die dan ofwel verweest raken (als je de foreign keys niet goed hebt ingericht) ofwel je delete query blokkeren.
(of je verwijdert alle afhankelijke data on-cascade, met als gevolg dat bijvoorbeeld je forum gesloopt wordt omdat topics de helft van de reacties missen.)
Gewijzigd op 09/06/2022 12:18:56 door Ivo P
Ivo P op 09/06/2022 12:18:41:
En je delete ook niet met
DELETE FROM user WHERE id = 123;
maar door
UPDATE user SET deleted = 1 WHERE id = 123;
Op deze manier is een delete-actie eenvoudig terug te draaien. En je hebt geen problemen met andere tabellen waarin de posts, bestellingen, profielen, vrienden etc staan. Die dan ofwel verweest raken (als je de foreign keys niet goed hebt ingericht) ofwel je delete query blokkeren.
(of je verwijdert alle afhankelijke data on-cascade, met als gevolg dat bijvoorbeeld je forum gesloopt wordt omdat topics de helft van de reacties missen.)
DELETE FROM user WHERE id = 123;
maar door
UPDATE user SET deleted = 1 WHERE id = 123;
Op deze manier is een delete-actie eenvoudig terug te draaien. En je hebt geen problemen met andere tabellen waarin de posts, bestellingen, profielen, vrienden etc staan. Die dan ofwel verweest raken (als je de foreign keys niet goed hebt ingericht) ofwel je delete query blokkeren.
(of je verwijdert alle afhankelijke data on-cascade, met als gevolg dat bijvoorbeeld je forum gesloopt wordt omdat topics de helft van de reacties missen.)
is niet voor een forum ;)
Gaat om een bedrijfs platform
>> Gaat om een bedrijfs platform
En je punt is?
Echt met alle respect, je hebt nog niet heel veel ervaring met programmeren. Dat blijkt duidelijk uit je vragen en de code die je tot nu toe laat zien. Maar je bent ondertussen wel een 'bedrijfsplatform' aan het programmeren? Neem je misschien niet een heel klein beetje te veel hooi op je vork?
Ik denk dat je dit niet graag wilt horen, maar mijn dringende advies is om als beginner eerst gewoon kleine hobby-projectjes te maken. Het begint bij een simpele "Hello World", daarna wat simpele afhandeling van GET/POST, vervolgens wat uitgebreide if-else-elseif structuren en dan iets van een simpel gastenboekje, of kleinschalig forumpje. Als je zoiets kan bouwen, én weet hoe je goede databasestructuren kan maken, dan kan je verder kijken naar uitgebreide dingen.
Ik krijg nu sterk de indruk dat je van de hak op de tak gaat. Eerst een query die niet werkt, en dan later de basis van if-else die je niet goed beheerst. En laat staan dat dat je nog niet weet hoe je moet debuggen waardoor we flink moeten doorvragen en er ellenlange topics ontstaan. En gezien je nog geen beveiliging tegen SQL-injection, en controle op queries inbouwt, is de kans groot dat je data in bepaalde gevallen niet goed in je database komt te staan wat je duur kan komen te staan. Ook zou je minimaal gebruik moeten maken van transacties met ROLLBACk en COMMIT in MySQL bij het uitvoeren van queries in belangrijke situaties.
Als ik je posthistorie op PHPhulp al bekijk dan durf ik durf te wedden dat je echt nog wel een flink aantal maanden verwijderd bent om te beginnen aan een belangrijk bedrijfsplatform.
Mijn advies:
- Of je besteed het uit
- Of je stelt het uit
- Of je zoekt iets in de vorm van een klant-en-klaar opensource of een gelicenseerd product.
Gewijzigd op 09/06/2022 18:28:05 door - Ariën -