Każdy element na stronie internetowej może zostać zmieniony przez złośliwego użytkownika (ukryte pola, elementy div, style, wywołania ajax, jak to nazwać...).
To powiedziawszy, jeśli już używasz przygotowanych instrukcji, nie powinieneś się zbytnio martwić o wstrzyknięcie SQL, ponieważ mysql już wie, jakie instrukcje zostaną wykonane.
Zamiast tego powinieneś oczyścić wszystkie dane wyjściowe renderowane na stronie internetowej.
Załóżmy, że w swoim formularzu pytasz, w jakim kraju mieszkam w ten sposób:
<select name="country">
<option value="Mexico">Mexico</option>
<option value="USA">USA</option>
<option value="Canada">Canada</option>
</select>
ale jestem złośliwym użytkownikiem i używam inspektora kodu Chrome do zmiany kodu HTML i wybieram Meksyk, ale zmieniam jego wartość na
a jeśli wypiszesz tę wartość na innej stronie w ten sposób:
Your country is: <?=$country?>
Potem napiszesz:
Your country is:
<script type="text/javascript">alert("Hello World")</script>
i pojawi się okno alertu z tekstem „Hello World”
Jaką szkodę mogę przez to wyrządzić, możesz się zastanawiać...
cóż, mogę z tym zrobić, co zechcę, mogę ukraść ciasteczka lub jeśli ta wartość jest publiczna (powiedzmy, że wyświetlasz tę wartość na swojej stronie głównej), to mogę przekierować użytkowników na inną stronę, zmienić zawartość Twojej witryny.. .cokolwiek zechcę.
Aby oczyścić wyniki swoich użytkowników, możesz użyć
htmlentities
To przekonwertuje na przykład <
> symbole do odpowiedniego kodu:
<
i >