Securitate site din exterior (cURL)

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
cadou
Mesaje:328

Securitate site din exterior (cURL)

Pentru a evita ca cineva sa trimita date nedorite din exteriorul site-ului, m-am gandit sa fac urmatorul lucru:

Cod: Selectaţi tot

if(isset($_SERVER['HTTP_REFERER'])) { $adresa = $_SERVER['HTTP_REFERER'];}


// daca vine de undeva cererea de adaugare in baza de date //
if(isset($adresa))
{
// definesc ce adrese accept //
$acc = array("$link/bancuri.php", "$adresasite/bancuri.php");


// daca vine de unde trebuie sa vedem daca este de unde vreau eu sa vina cererea //
if($adresa == in_array($adresa, $acc))
{
echo "da ai voie sa adaugi in baza de date";
}


// cererea NU vine de unde trebuie
else
{
echo "nu ai voie sa adaugi in baza de date";
}
}



// daca nu are referinta //
else
{
echo "adresa a fost accesata simplu din adress bar";
}
1. nu stiu daca asta ma fereste de accesare fara autorizatie din exterior cu cURL
2. Nu am idee cum as putea sa adaug in array urmatorul lucru:
am si adresa de genul $numesite/bancuri-x , unde x este doar un numar ( bancuri-10 ) adica pagina 10 cu bancuri
3. Acelasi lucru as dori sa il fac si pentru adresa de genul: $numesite/bancuri/autor/XXX , unde XXX reprezinta un nume de utilizator inscris pe site. cum as putea sa il bag in array ?
4. Tot pentru punctul 3, $numesite/bancuri/autor/XXX/X , unde XXX reprezinta un nume din baza de date si X reprezinta un numar intreg, adica pagina 10 de bancuri adaugate de autorul Admin .

Ceva explicatii, solutii, daca exista ?

Multumesc anticipat!

MarPlo Mesaje:4343
Din ce stiu pot sa spun ca unele browsere nu trimit date de HTTP_REFERER la server. Iar prin cUrl pot fi transmise date pentru HTTP_REFERER:

Cod: Selectaţi tot

curl_setopt($ch, CURLOPT_REFERER, 'http://example.com/1');
- Deci nu e de baza si util sa folosesti HTTP_REFERER.

Mai mult, nu am experienta legat de securitate site ca sa dau indicatii /solutii in acest domeniu; poate altcineva.
- Oricum, poate nici nu e nevoie de astfel de masuri complexe.

misat Mesaje:22
Intr-adevar undele browserer nu transmit HTTP_REFERER, asa ca in anumite situatii ai putea sa ai probleme.

Da, prin cURL (precum si alte instrumente) se poate de transmis HTTP_REFERER, asa ca aceasta idee nu cred ca e cea mai buna (de fapt nu stiu motivul exact pentru care vrei sa faci asa restrictii).
O solutie ar fi ca in momentul cind creezi forma pe client, sa generezi si o cheie care ai putea sa o validezi pe server. Astfel cind clientul transmite datele se transmite si cheia, iar daca aceasta lipseste sau "nu este cunoscuta" nu permiti adaugarea datelor. Desigur date pentru adaugare e bine sa le transmiti prin POST (sau PUT).

Daca totusi o sa decizi sa rezolvi utilizind validarea HTTP_REFERER:
daca ai un string in care o parte este "variabila" (sau mai multe parti), pentru a compara cu alt string poti utiliza expresii regulare si asa functii ca preg_match din PHP, sau alte functii de acest gen.

cadou Mesaje:328
Toate datele sunt trimite prin post.
Azi cineva a putut sa se logheze pe site fara a avea cont, cum a facut si cum as putea sa ma protejez de asta, habar nu am ....

royal27 Mesaje:79
In index.php introduci

Cod: Selectaţi tot

define( 'comanda ta', true );
eu am creat un folder de unde preiau toate fisierele de exemplu system/login/index.php
in login.php am introdus

Cod: Selectaţi tot

defined("comanda ta") or die("<center><marquee><h4></h4></marquee><marquee direction='down' width='550' height='500' behavior='alternate' style='border:solid;'><marquee behavior='alternate'><div style='width:100%;'><font color='red'><h1>Access denied</h1></font></div></marquee></marquee><br/><marquee><h4>www.legacy-cms.ro</h4></marquee></center>");
sa accesez pagina respectiva am mai facut o functie in page.php

Cod: Selectaţi tot

if($page == "" || $page=="login"){

include('system/login/index.php');


}
iar in htaccess

Cod: Selectaţi tot

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


# Redirect all request to the index page
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?page=$1 [QSA,L]
Asa ca daca incerc sa accesez fisierul login din folderul system,nu o sa ma lase,daca introduc adresasiteului.com/login o sa ma lase
Recomand sa incerci

chimie Mesaje:5
cadou scrie:
Lun Noi 13, 2017
Toate datele sunt trimite prin post.
Azi cineva a putut sa se logheze pe site fara a avea cont, cum a facut si cum as putea sa ma protejez de asta, habar nu am ....
E posibil sa fii folosit sqlinject, cel mai sigur e sa faci o protectie anti-proxy, pt ca programele folosite in general folosesc proxy, si incearca sa verifici daca ai vulnerabilitati in logare

Subiecte similare