Autor Zpráva
TeOkan
Profil *
Zdravím všechny, potřeboval bych poradit ohledně následujícího skriptu.

$(document).ready(function() {
    $('.system_configuration').bootstrapValidator({
        feedbackIcons: {
            valid: 'fa fa-check',
            invalid: 'fa fa-times',
            validating: 'fa fa-refresh'
        },
        fields: {
           // Pravidla pro inputy, filtry a sanitační metody
        }
    }).on('success.form.bv', function(e) { 
        ajaxPrepare($(this));
    });
});

function Result(data) { 
    alert(data); //Výsledek provedení scriptu
}

function Before(arr, $form, options) {
    alert('BEFORE');
    //Editace a informování o běhu skriptu
}

function ajaxPrepare(form) {
    $.get('/form-address.php', {token: $("[name='token']").val(), form: form.attr("id")})
    .done(function( data ) {
        ajaxSubmit(form, data);
    });
}

function ajaxSubmit(form, url) {
    form.submit(function() { 
        form.ajaxSubmit({
            beforeSubmit:  Before,
            success:       Result,
            type:          'POST',
            dataType:      'json',
            url:           url
        }); 

        return false; 
    }); 
}

Cílem je, aby nemusel mít formulář vyplňený atribut name a byly by tím tedy kompletně skryty adresy (k vůli bezpečnosti nechci vyplňovat cestu). Cesta se tedy pomocí ajaxu funkcí $.get vygeneruje z externího php souboru, který na základě parametru ID formuláře vrátí správnou URL adresu pro vykonání akce formuláře.

Co je tedy špatně? Formulář se neodesílá - funkce ajaxSubmit() se ještě volá, v ní je správně předána adresa URL, ale ani přesto se formulář pravděpodobně vůbec neodešle. Neodesílá se ani při ručním vyplnění URL, což je divné. Když jsem měl místo horního volání ajaxPrepare volaný ajaxSubmit(), formulář se odesílal. Co s tím?


Předem díky za váš čas a rady :)
_es
Profil
TeOkan:
Cílem je, aby nemusel mít formulář vyplňený atribut name a byly by tím tedy kompletně skryty adresy (k vůli bezpečnosti nechci vyplňovat cestu).
No a to si snáď myslíš, že tie adresy a „cesty“ si potom nikto nedokáže zistiť - ak by to teda chcel? Čo má s tým spoločné atribút name formulára?
juriad
Profil
TeOkan:
To není vůbec žádné zabezpečení. Stačí zmáčkout F12 a přejít na kartu síť a hned vidím, jaké požadavky byly odeslány a jejich odpovědi včetně jejich obsahu. Vydal ses chybnou cestou.

Přidej si tam pár dalších alertů (třeba před řádky 26, 28, 33, 34). Pak uvidíš, kam až ten kód dojde. Nebo si tam dej breakpointy, to vyjde na stejno.
TeOkan
Profil *
Dobře a můžu se tedy zeptat, zdali je nějaká možnost jak zabezpečit tento problém? Všude je doporučováno nezviditelňovat cesty k souborům, jak tedy na to?

Děkuji.
juriad
Profil
TeOkan:
Docela by mě zajímalo, kde se to doporučuje. Nikde jsem na to ještě nenarazil. Možná jsi to jen špatně pochopil.

Měj na serveru jeden veřejný skript, kterému budeš posílat všechny požadavky a ten je jen zkontroluje a podle nějakého parametru includne jiný skript, který je zpracuje. Tyto další skripty pak mohou být mimo část přístupnou zvenku.
TeOkan
Profil *
Aha, výborně, děkuji za vysvětlení.

Ještě bych tedy rád využil rychlosti odpovídání a chtěl bych se jen dotázat, jak je nejlépe vhodné řešit přístup k souborům zvenku (např z URL). Htaccessem? Tím si však zablokuji celkový přístup, ne?

Nebo jebdostačujicí kontrola "defined" vně souboru?

S velkým díky,
TeOkan
juriad
Profil
Máš dvě možnosti:
1) Citlivé skripty budeš mít v normálním adresáři webu, který bude mít pomocí .htaccess nastaveno deny from all.
2) Citlivé skripty budeš mít o úroveň výš než je root webu. (O adresář výše než je index.php.)Toto je bezpečnější, ale může to vyžadovat speciální nastavení serveru. (Musíš mít přes FTP přístup k tomu adresáři + musí být PHP nakonfigurované aby ti povolilo includovat odtamtud skripty.)

A z venku dostupných skriptů budeš mít minimum, například jen index.php, který nevykonává žádnou citlivou operaci, je se podle parametrů rozhoduje, co má includovat (na include se .htaccess nevztahuje).
TeOkan
Profil *
Dobře, super děkuju moc.

Deny from all nastavim tedy na podadresář ve kterém jsou citlivé scripty, chápu to správně?
juriad
Profil
Ano. Pak k těm skriptům nebude vůbec z venku přístup. Proto, pokud mají být dostupné (ale stále skryté), musejí být zprostředkovány jiným skriptem.
TeOkan
Profil *
Tak to je úžasné. Mockrát děkuji za rady, hned si z toho vezmu ponaučení :) tak ještě jednou děkuji a ať se daří.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: