Controle op website toegang

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marc Huyghebaert

Marc Huyghebaert

28/06/2016 00:23:32
Quote Anchor link
Hoi,

Ik schets kort wat ik wil doen.
aan de ene kant, op mijn server een databank met daarin lijst van website's met start en einddatum
aan de andere zijde, op de verschillende website's ergens anders dan op mijn server uiteraard een kort stukje code die contact maakt met mijn database en nakijkt of de website nog ok is om mee verder te werken, of als de tijd verstreken is en deze dus stopt

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
<?php
session_start();
ob_start();
include("connect.php");

if (isset($_POST['webid'])){
    $sid = $_POST['webid'];
    $siteresult = mysql_query("SELECT * FROM website WHERE website_id = '$sid'");
    if (mysql_num_rows($siteresult)) {
        while (($prodrow = mysql_fetch_assoc($siteresult)) !== false){
                 $websitestartdate = $prodrow['website_startdate'];
            $websiteenddate = $prodrow['website_enddate'];
                
            // duration of contract
            $startdate  = strtotime($websitestartdate);
            $enddate = strtotime($websiteenddate);
            $contractdays = ceil(abs($enddate - $startdate) / 86400);
            
            // days left
            $now = strtotime(date("Y-m-d H:m:s"));                
            if ($now > $enddate){
                // overdue
                $sitestatus = "Blocked";
            }
else{
                // seems ok
                $sitestatus = "OK";
            }
        }
    }
else {    
        // Nothing found
        $sitestatus = "Blocked";
    }
}
else{
    // No ID found
    $sitestatus = "Blocked";
}

?>


heb dit getest met de get function en gewoon in de url aangeroepen en dit gedeelte werkt.

wat betreft het stukje code die op de verschillende site moet draaien heb ik al verschillende dingen geprobeerd via jquery post function, uren al naar een oplossing gezocht maar niets die werkt.

dus stel ik hier maar de vraag, hoe ik dat kan bekomen - dus bij start van de site even in 'externe database' kijken of mag verder gegaan worden of niet - zonder dat de gebruiker iets daarvan merkt.

graag jullie feedback

grtjs marc
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken i.p.v. quote-tags. Die laatste zijn bedoeld voor citaten.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 28/06/2016 00:29:34 door - Ariën -
 
PHP hulp

PHP hulp

22/11/2024 22:10:23
 
- Ariën  -
Beheerder

- Ariën -

28/06/2016 00:32:49
Quote Anchor link
Het gaat dus om een licentiesysteem, waarbij jij centraal bepaalt of iemand zijn CMS mag gebruiken?
Dan is het niet verstandig om vanuit dat CMS een databaseconnectie te leggen met de 'master-database', want die inlog kan uiteraard simpel worden onderschept.

De beste oplossing is het gebruik van een API die aan de met je hostname en een unieke hash/licentiecode een URL aanroept, en daar de status ophaalt. Let er wel op dat je een CMS bij een connection-timeout niet opslot gooit. Dat zou zonde zijn in het geval van een netwerkstoring.

Verder wordt het gebruik van de MySQL-functies afgeraden. De vervanger hiervoor is MySQLi of PDO.
Gewijzigd op 28/06/2016 00:33:21 door - Ariën -
 
Marc Huyghebaert

Marc Huyghebaert

28/06/2016 00:37:28
Quote Anchor link
alvast bedankt voor deze feedback - ben idd nog ni rond met het systeem maar zocht al een manier waarop site met master database kan communiceren
 
- Ariën  -
Beheerder

- Ariën -

28/06/2016 06:34:23
Quote Anchor link
Zorg ook dat je het controlescript encoded, om te voorkomen dat iemand die eruit sloopt. Denk bijv. aan ioncube.

Wel moet de server dat ondersteunen.
 
Thomas van den Heuvel

Thomas van den Heuvel

28/06/2016 13:22:37
Quote Anchor link
Of je verzorgt zelf de hosting van die websites. Dan is een dergelijke controle overbodig.
 
Marc Huyghebaert

Marc Huyghebaert

28/06/2016 15:49:01
Quote Anchor link
blijkbaar heb ik mijn vraag ofwel niet duidelijk gesteld ofwel op de verkeerde plaats.
waardeer de adviezen wel maar krijg geen antwoord op wat ik zoek

ik weet weet best waarom ik dit zo wil

enfin zal dan zelf wel oplossingen verdr zoekn tot ik deze vindt
 
- Ariën  -
Beheerder

- Ariën -

28/06/2016 15:57:01
Quote Anchor link
Jij wilt dus een systeem om websites die je bouwt dus aan/uit te zetten. Denk bijv. aan een betalingsachterstand of iets dergelijks? Klopt dat?

Want in dat geval heb ik toch echt een goede oplossing gegeven, plus de uitleg waarom het de beste oplossing is.

Vertel anders eens duidelijk wat je precies wilt?
Gewijzigd op 28/06/2016 15:58:01 door - Ariën -
 
Ozzie PHP

Ozzie PHP

28/06/2016 15:57:44
Quote Anchor link
@Marc

Kan de gebruiker/eigenaar van de website zelf bij de code van de website?
 
Ward van der Put
Moderator

Ward van der Put

28/06/2016 16:38:28
Quote Anchor link
Ik gok op een dubbelzinnig gebruik van "gebruiker".
 
- Ariën  -
Beheerder

- Ariën -

29/06/2016 01:31:20
Quote Anchor link
Als er behoefte is kan ik wel wat code geven van het licentiesysteem die ik ooit eens gebouwd heb.

Deze is een eigen API die aangeeft of een bepaalde sleutel en hostname/domein waarop een CMS van mij draait, toegestaan is.
 
Marc Huyghebaert

Marc Huyghebaert

29/06/2016 02:30:27
Quote Anchor link
@ Ariën zou vriendelijk zijn

Toevoeging op 29/06/2016 02:33:57:

Dit heb ik intussen simpel gemaakt waarbij de waarde na webid site nummer is, uiteraard dit allemaal in basis en voorzien worden van een versleuteling - alhoewel het mij eerder om het principe van werking gaat

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script>
$(document).ready(function(){
$.post('checksite.php', {webid:"2"}, function (output){
/*
if (output == 'OK')
echo 'your good to go';
else
echo 'please pay me first';
*/
$('#status').html(output).show();
});
});
</script>
</head>
<body>
<div id="status"></div>
</body>
</html>
 
- Ariën  -
Beheerder

- Ariën -

29/06/2016 08:52:09
Quote Anchor link
En dan ben ik benieuwd wat POST doet, en waar je jQuery gebruikt terwijl je beter file_get_contents kan gebruiken.

Anyway, hier is de code van mijn licentie-API (die je beter kan herschrijven naar MySQLi). Ikzelf gebruik dit niet meer, maar dit script geeft aan de hand van een key in de config aan of er een licentie is en op wiens naam die staat. Een check of een site gebruikt mag worden is er niet, omdat ik het niet nodig vond.

api.php voor op de externe server
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
<?php
mysql_connect("localhost","","") or die("MySQL login is incorrect.");
mysql_select_db("clients") or die("Database is incorrect");

if (!isset($_GET['username'],$_GET['serial'], $_GET['host'])) {
echo "FIELDS_ARE_EMPTY";
}
else {            
$sql = "SELECT     username,
        serial,
        hostname,
        name,
        address,
        telephone
    FROM     clients
    WHERE    `username` = '"
.mysql_real_escape_string($_GET['username'])."'
    AND     serial = '"
.mysql_real_escape_string($_GET['serial'])."'
    AND    hostname = '"
.mysql_real_escape_string($_GET['host'])."'";
                        
$license_result = mysql_query($sql) or die(mysql_error()."<br>".$sql);
    if(mysql_num_rows($license_result)){
    $license = mysql_fetch_assoc($license_result);
    echo "OK";
        if(isset($_GET['ownerdetails'])) {
        echo " - ".$license['name']."\n".$license['address']."\n".$license['telephone'];
        }
    }
else {
    echo "NOT_OK";
}
}

?>


En de controle in de admin om de gegevens op te halen vanuit de CMS client.
licentie.php
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
<?php
$license_url
= "http://api.DOMEIN_VAN_MASTERSEVER.nl/api.php?username=".$settings['licence_name']."&serial=".$settings['license_key']."&host=".$_SERVER['HTTP_HOST'];
$license_owner = $license_url."&ownerdetails=true";
$license_connection = file_get_contents($license_url);
$license_owner_connection = file_get_contents($license_owner);
if ($license_connection == "OK") {
    $status = "<span style='color:green'>Licentie goedgekeurd</span>";
}
else {
                $status = "<span style='color:red'>Licentie incorrect, neem a.u.b. contact op met de sitebouwer.</span>";
}


echo $status;

if($license_connection=="OK") {
        echo'Licentie eigenaar:<br />'.nl2br(substr($license_owner_connection,5))
    }
else {
        echo 'Er is een probleem aangetroffen in de licentie van het CMS';
    }

?>
Gewijzigd op 29/06/2016 08:57:29 door - Ariën -
 
Ward van der Put
Moderator

Ward van der Put

29/06/2016 09:30:34
Quote Anchor link
@Ariën, maar die beveiliging is toch kinderlijk eenvoudig te omzeilen? Verander in licentie.php voor de CMS-client twee keer == "OK" in != "OK" en een licentie die niet okay is, wordt okay.
 
- Ariën  -
Beheerder

- Ariën -

29/06/2016 09:35:51
Quote Anchor link
Tenzij hij encoded is, wat zeker handig is.
 
Marc Huyghebaert

Marc Huyghebaert

29/06/2016 10:31:49
Quote Anchor link
dank je voor de feedback

Toevoeging op 29/06/2016 13:44:32:

Uiteraard is beveiliiging nodig, aan de andere kant, jullie zijn allemaal experts, mensen die weten wat ze doen, de grote massa echter niet, en het is/was ook niet de bedoeling dit in een pro omgeving te gebruiken.

Maar uiteraard beveiliging moet wel, wou alleen zeggen we moeten ook ni 'zwart' denken

Alvast iedereen hartelijk bedankt voor zijn bijdrage
 
Thomas van den Heuvel

Thomas van den Heuvel

29/06/2016 13:54:00
Quote Anchor link
Ozzie PHP op 28/06/2016 15:57:44:
@Marc

Kan de gebruiker/eigenaar van de website zelf bij de code van de website?

Dit lijkt mij nog steeds een relevante vraag.
 
- Ariën  -
Beheerder

- Ariën -

29/06/2016 14:55:43
Quote Anchor link
Daarom is het verstandig om, als het bij de gebruiker gehost wordt, om het in ieder geval te encoden met Ioncube of Zend Guard. De webhosting moet dat wel weer ondersteunen, maar vaak is het geen probleem.

Of als je het zelf host, dan kan je de hele controle buiten de hele Admin buiten de webroot zetten zodat de gebruiker er niet bij kan. Uiteraard zijn gebruiksvoorwaarden om je code te beschermen ook zeker handig. Mocht het ooit uitlekken of iemand de boel hacken, dan sta je juridisch zeer sterk.
 
Marc Huyghebaert

Marc Huyghebaert

29/06/2016 16:01:26
Quote Anchor link
@ Thomas van de Heuvel

In eerste instantie ja, als hij door de duizenden lijnen code wilt sneuffelen
Maar zoals Arien reeds vermelde - best encoden

Meestal is er ook nooit een probleem en mocht zich da voordoen is het ook ni de bedoeling groot scherm te tonen met melding zo van jij moet nog betalen of dergelijke - kan subtiel waardoor lijkt dat er ergens een kleine error is en contact moet opgenomen worden met de maker van, of eigenaar van, of beheerder of hoe het ook maar ingezet wordt

Bvb mijn wordpress installatie's beschikken over een kleine snippet die ingeval gebruiker zijn eigen delete of in de role setting rammeld en zichzelf uitsluit, er toch via via terug in de backend toegang kan bekomen worden - gebruiker is daarvan ook op de hoogte, wettelijke verplichting
 
Thomas van den Heuvel

Thomas van den Heuvel

29/06/2016 16:20:02
Quote Anchor link
Realiseer je wel dat je zelf de noodzakelijkheid van encoding introduceert door de opzet die je gebruikt (er toegang tot de broncode wordt verschaft).

Persoonlijk zou ik eerst proberen het probleem weg te nemen in plaats van het probleem op te lossen wat ik zelf introduceer. Dit laatste is toch een beetje voortborduren op een verkeerde beslissing.
 



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.