Zabezpieczenie

0

Witam! Czy w kodzie poniżej jest jakiś błąd? Pytam, bo mogę manipulować zapytaniami z poziomu formularza. Przykład: wpisanie 'kruk boolean #' tworzy mi tylko jedną kolumnę i to o nazwie kruk.

$nazwa_wydarzenia = htmlentities($_POST['nazwa_wydarzenia'], ENT_QUOTES, "UTF-8");
                        $nazwa_wydarzenia =  mysqli_real_escape_string($polaczenie, $nazwa_wydarzenia);
                        if ($nazwa_wydarzenia != "")
                        {
                            if (($polaczenie -> query("ALTER TABLE {$_SESSION['table-name']}event ADD {$nazwa_wydarzenia}_udzial boolean")) && ($polaczenie -> query("ALTER TABLE {$_SESSION['table-name']}event ADD {$nazwa_wydarzenia}_uregulowano boolean")))
                            {
                                for ($i=1; $i<=$ile_rekordow; $i++)
                                {
                                    if (isset($_POST[$i]))
                                        $polaczenie -> query("UPDATE {$_SESSION['table-name']}event SET {$nazwa_wydarzenia}_udzial = 1, {$nazwa_wydarzenia}_uregulowano = 0 WHERE nr_dziennik = $i");
                                    else
                                        $polaczenie -> query("UPDATE {$_SESSION['table-name']}event SET {$nazwa_wydarzenia}_udzial = 0, {$nazwa_wydarzenia}_uregulowano = 0 WHERE nr_dziennik = $i");
                                }
                                echo '<span style = "color: green">Zdarzenie utworzone poprawnie</span><br>';
                            }
0

Nie jest to rozsądne. Wstępnie widzę, że korzystając z podzapytań da rade dostać się do całej bazy.

0

Dlatego pytam jak to rozwiązać. Myślałem, że htmlentities() i real_escape_string() rozwiąże sprawę...

0

no to ci odpowiadam: nie rób tego dynamicznie, korzystaj z pdo, jeśli piszesz w czystym php.

0
mr_jaro napisał(a):

no to ci odpowiadam: nie rób tego dynamicznie, korzystaj z pdo, jeśli piszesz w czystym php.

Wiesz może co tu jest nie tak? Otrzymuję taki błąd: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''TI01'' at line 1

$stmt = $conn -> prepare('SELECT imie_nazwisko FROM :a');
$stmt -> bindValue(':a', $_SESSION["table-name"], PDO::PARAM_STR);
$stmt -> execute();
0

Oczywiście, znowu próbujesz robić zapytanie dynamicznie. Nie wstawiaj tam dynamicznych nazw kolumn i nazw tabel. Te rzeczy muszą być na sztywno by było bezpiecznie, nigdy nie mogą pochodzić od usera.

0

screenshot-20190326172427.png
User logując się wybiera niejako tabelę z jakiej będzie korzystał. Myślę, że jest to mus robiąc zapytanie dynamiczne, bo inaczej musiałbym zrobić pełno ifów czy switchy. Czy się mylę?

1

Jeśli logując się user wybiera tabele, to znaczy, że masz źle bazę zaprojektowaną i popełniasz tradycyjne błędy początkujących dzieląc tabele na użytkowników. a to nie tędy droga. Relacje to jest odpowiedź na wszystkie twoje troski. Przebuduj bazę.

0

Jesteś okrutny

0
Bartosz Żelek napisał(a):

Jesteś okrutny

Chcesz robić to porządnie, czy aby działało? Pokaż projekt bazy a powiem co masz skopane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0