Jump to content

AntiSQL Injection


FoxLv
 Share

Recommended Posts

Gari Nav Ko Rakstit - Problema Tada Kad Nesen Nevaretu Teikt ka Man, Bet Draugam Uzhakoja Webu (sql).

 

Kautkur Biju Dzirdejis Par Tadu Antisql Injection Skriptu.

Tikai Nav ne Jausmas Kur Tadu Vai Tam Kautko Lidzigu Dabut.

Butu Pateicigs Ja Varetu Palidzet :)

Skripts Ir Domats Prieks Ta Lai Aizsargatu SQL No Visadam Drazam, Un Hakeriem.

Please Help. :)

Link to comment
Share on other sites

parametriem pirms noticēšanas izmanto validāciju (datu tips, garums, konteksts)

neizmanto php, bet kaut vai to pašu delphi, kas strādā ar db ar komponentēm.

Link to comment
Share on other sites

Emm Vai Nu Es Nesapratu Ne Varda No Tava Teksta Vai Ari Tu Nesaprati Manu Domu.

Link to comment
Share on other sites

eMDiiPii

VIL, arī PHP ir DB abstrakcijas slāņi, kā arī prepared statements un citādas jaukas lietas...

Un caur CGI laist delphi aplikāciju ir tāds oldschools, ka nemetas ...

Neērti, salīdzinot ar PHP :-)

Tad jau labāk būtu ieteicis JSP izmantot.

FoxLv, varbūt tu biji domājis Apache2 mod_access vai arī šo līko risinājumu?

Link to comment
Share on other sites

sorry, es ar php esmu saskāries tik daudz, cik uzinstalēt un vienu selektu no oracle pacelt.

Tā kā selektu rakstīju plain tekstā, validācijas nepieciešamība bija acīmredzama.

 

JSP konceptuāli tas pats delphi variants vien ir.

Link to comment
Share on other sites

eMDiiPii

Bet web`am piemērotāks ir JSP un klasiskāks :-)

Ja tu būtu izmantojis PDO(`dabiskais` PHP datubāžu abstrakcijas veids), nevis klasiskās oci_* funkcijas, tev būtu pieejami ar prepared statements.

<?php
try {
$dbh = new PDO('oci:', 'scott', 'tiger');
} catch (PDOException $e) {
die($e->getMessage());
}
$stmt = $dbh->prepare("SELECT * FROM tableName WHERE fieldName = ?");
if ($stmt->execute(array($_GET['name']))) {
 while ($row = $stmt->fetch()) {
print_r($row);
 }
}

Link to comment
Share on other sites

Sie Scripti Der SQL 2000? - Ta Aizsardziba Ir Domata Konkreti MuOnline Webam.

Link to comment
Share on other sites

JSP konceptuāli tas pats delphi variants vien ir.

 

patiesi ? kur tad ir līdzība ? cik atceros, delfos ir windows logi, bet jsp tiek translēts/kompilēts uz servletu, kas drukā htmlu

 

topika autoram - savam draugam pasaki, ka php ir gatava funkcija, kurai cauri jāizlaiž sql, lai novērstu injekcijas, nevajag nekādus skriptus :evil:

Link to comment
Share on other sites

eMDiiPii

MarisO, nav mssql_escape_string vai mssql_real_escape_string .°

A Delphi var laist caur CGI, nevajag nekādus logus būvēt, tik konsolē izmest gan headerus, gan HTML.

Link to comment
Share on other sites

function sql_quote( $value )
{
if( get_magic_quotes_gpc() )
{
	  $value = stripslashes( $value );
}
//check if this function exists
if( function_exists( "mysql_real_escape_string" ) )
{
	  $value = mysql_real_escape_string( $value );
}
//for PHP version < 4.3.0 use addslashes
else
{
	  $value = addslashes( $value );
}
return $value;
}

Labots - rzx
Link to comment
Share on other sites

vai tad mysql_real_escape _string nenovers injekcijas? Vai ari eksiste vel kads veids ka sacakaret kverijus?

Link to comment
Share on other sites

Visdrošākais variants ir parametrizētie kveriji un storētās procedūras.

 

Universāls skripts pret SQL injekciju neeksistē - katra programma ir specifiska, un katrai ar roku jāiet cauri, un jāskatās, kurās vietās var rasties SQL injekcijas.

Link to comment
Share on other sites

Artic^MX

<?php
$badwords = array(";","DROP","SET","UPDATE","'","\"","*");

foreach($_POST as $value)
 foreach($badwords as $word)
if(substr_count($value, $word) > 0)
// te var detektot ip adresi
  die("SQL Injection Detected");
?> 

 

kodu liek katra koda faila sākumā, kurā tiek veidots pieslēgums mysql bāzei.

 

Šis kods "itkā" novērš injekcijas caur input laukiem, kas tiek sūtīti ar post metodi.

 

šis nav mans skripts un atbildību nenesu.

 

ja kaut kas te nav kārtībā, tad labojiet vai dzēstiet postu ;)

Labots - Artic^MX
Link to comment
Share on other sites

Viena maza problēmiņa - šis skripts neļauj lietotājam teksta laukos ievadīt pēdiņas, dubultpēdiņas, semikolus vai zvaigznītes. ;)

Link to comment
Share on other sites

eMDiiPii

vai tad mysql_real_escape _string nenovers injekcijas? Vai ari eksiste vel kads veids ka sacakaret kverijus?

mysql_real_escape_string prasa aktīvu mysql savienojumu un ir domāts MySQL .

Autors izmanto Microsoft SQL Server 2000 un PHP nav tādas funkcijas mssql_escape_string vai mssql_real_escape_string, tādēļ ir jāizmanto addslashes();

 

Artic^MX -

SQL injekcijas var izveidot arī GET metodi padoti dati vai arī cepumos esoši dati.

Bez tam, šis skripts nenovērš iespēju brīvi izselektot datus no datubāzes, vai piemēram, ielogoties kā administratoram.

rzx, kur SQL Server 2000 un magic_quotes izslēgtai konfigurācijai atšķirība no vienkārša addslashes() ?

 

Jeasus, mans iepriekš iepostētais koda gabals satur parametrizētu vaicājumu ...

Link to comment
Share on other sites

Ta vienkārši vajag izveidot atsevišķu db lietotāju priekš web un norādīt viņam tiesības uz konkrētiem db objektiem, kā arī maksimāli izmantot db glabātās procedūras/funkcijas/skatus.

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...