sql >> Database teknologi >  >> RDS >> Mysql

Forhindrer server-side scripting, XSS

Udskriv aldrig nogen som helst bit af data til HTML-strømmen, der ikke er blevet sendt gennem htmlspecialchars() og du er færdig. Simpel regel, nem at følge, fjerner fuldstændig enhver XSS-risiko.

Som programmør er det din job til at gøre det, dog.

Du kan definere

funktion h(s) { return htmlspecialchars(s); }

if htmlspecialchars() er for lang til at skrive 100 gange pr. PHP-fil. På den anden side ved hjælp af htmlentities() er slet ikke nødvendigt.

Nøglepunktet er:Der er kode, og der er data. Hvis du blander de to, opstår der dårlige ting.

I tilfælde af HTML er kode elementer, attributnavne, entiteter, kommentarer. Data er alt andet. Data skal undslippes for at undgå at blive forvekslet med kode.

I tilfælde af URL'er er kode skemaet, værtsnavnet, stien, mekanismen for forespørgselsstrengen (? , & , = , # ). Data er alt i forespørgselsstrengen:parameternavne og værdier. De skal undslippes for at undgå at blive forvekslet med kode.

URL'er indlejret i HTML skal være dobbelt escaped (ved at URL-escaping og). HTML-escaping) for at sikre korrekt adskillelse af kode og data.

Moderne browsere er i stand til at analysere utroligt ødelagte og forkerte markeringer til noget nyttigt. Denne evne bør dog ikke understreges. Det faktum, at noget tilfældigvis virker (som URL'er i uden korrekt HTML-escaping) betyder ikke, at det er godt eller korrekt at gøre det. XSS er et problem, der har rod i a) folk, der ikke er klar over data-/kodeadskillelse (dvs. "udslip") eller dem, der er sjuskede, og b) folk, der forsøger at være kloge med, hvilken del af data de ikke behøver for at undslippe.

XSS er let nok at undgå, hvis du sikrer dig, at du ikke falder ind under kategorierne a) og b).



  1. Fremmednøgle, der henviser til flere tabeller

  2. Udfør udløser lagrede procedurer på SqlFiddle. Mysql

  3. Mysql rumlig afstand ved hjælp af POINT - Virker ikke

  4. MyBatis Batch Insert/Update for Oracle