Jump to content
php.lv forumi
forSilence

Input (drošība)

Recommended Posts

Tātad esu izveidojis pavisam vienkāršu php kodu, caur ko viņš nogādā datus datubāzē, tā kā esu iesācējs vēlētos paprasīt, lai jūs sniegtu padomus kā passargāt kodu no caurumiem, un kas man būtu jādara.

 

Un vēlētos, lai jūs palabotu manu skriptu vai norādītu caurumus un kā viņu labot. Lūk ir kods:

 

<?php
include("../ftop.php");
if(isset($_SESSION['ieligojies']))
	{ 
if(isset($_GET['id']))
{
$mans_id = quote_smart($_SESSION['mans_id']);
$id = quote_smart($_GET['id']);
$sql = mysql_query("SELECT * FROM members WHERE id = $mans_id");
$row = mysql_fetch_array($sql);
$name = quote_smart($row['niks']);
$sql1 = mysql_query("SELECT * FROM forum_incat WHERE id = $id ") or die("Kļuda: ".mysql_error());
$row1 = mysql_fetch_array($sql1);
$id2 = quote_smart($row1['cat_id']);
$fid = quote_smart($row1['id']);
if(isset($_POST['title'])) {
$title = quote_smart($_POST['title']);
$apraksts = quote_smart($_POST['apraksts']);
$raksts = quote_smart(nl2br(htmlspecialchars($_POST['raksts'])));
if(!empty($_POST['title']) AND !empty($_POST['raksts'])){
mysql_query("UPDATE members SET posts = posts+1 WHERE id = $mans_id");
mysql_query("UPDATE forum_incat SET topick_count = topick_count+1 WHERE id = $id");
mysql_query("INSERT INTO forum_newtopick 
(forum_id,title,apraksts,raksts,user_id,user,last_activity,date) 
VALUES
($fid,$title,$apraksts,$raksts,$mans_id,$name,".time().",".time().")
") or die (mysql_error());
$id = mysql_query("SELECT * FROM forum_newtopick ORDER BY id DESC");
$id1 = mysql_fetch_array($id);
mysql_query("INSERT INTO aktivitats (title,user,locid,date,links,place) VALUES
($title,$name,'".$id1['id']."',".time().", '/forums/showtopic/','newtopic')
") or die (mysql_error());
$sucess = "Raksts veiksmigi izveidots! <meta http-equiv='refresh' content='1;url=/forums/showtopic/".$id1['id']."' >";
?>
<?php
}else{
$sucess = 'Virsraksta un raksta lauki nevar būt tukši!';
}
}
	if(empty($row1['id'])) {
   $forua_id = "Nav sada foruma";
  }else{
   $forua_id = ''?><div id="category">

<div id="cat-title">Jauns raksts</div>
<form name="forma" method="post">
<table border="0">
<tr><td><b>nosaukums</b></td>
<td><input style="width:400px" type="text" name="title" /></td></tr>
<tr><td><b>apraksts</b></td>
<td><input style="width:500px" type="text" name="apraksts" /></td></tr>
<tr><td><b>Saturs</b><br />
<script>edToolbar('postarea');</script>
</td>
<td><textarea id='postarea' name="raksts" rows="7" cols="50"></textarea></td></tr>
<tr><td></td><td><input type="submit" value="Izveidot rakstu" /></td></tr>
</table>
</form>
<?=$sucess?>
</div><? '';
  }
}
}else{
echo 'Ilogojies!';
}
include("../fbot.php");
?>

 

Iepriekš paldies

Share this post


Link to post
Share on other sites
function quote_smart($value)
{
 if (get_magic_quotes_gpc())
 {
 $value = stripslashes($value);
 }
 $value = "'" . mysql_real_escape_string($value) . "'";
 return $value;
}

Share this post


Link to post
Share on other sites

$value = "'" . mysql_real_escape_string($value) . "'";

 

Šis neliekas pareizi, ka automātiski tiek pievienotas pēdiņas. Manuprāt, to labāk darīt kad liek kvērijā, nevis funkcijā.

 

$query = "SELECT * FROM table WHERE a = '" . quote_smart($a) . "'";

 

Otrkārt, vajadzētu arī kodā likt normālas atkāpes un atsevišķās vietās tukšas rindiņas, lai kods ir pārskatāmās. Savādāk ir viena liela putra.

Share this post


Link to post
Share on other sites

$value = "'" . mysql_real_escape_string($value) . "'";

 

Šis neliekas pareizi, ka automātiski tiek pievienotas pēdiņas. Manuprāt, to labāk darīt kad liek kvērijā, nevis funkcijā.

 

$query = "SELECT * FROM table WHERE a = '" . quote_smart($a) . "'";

 

Otrkārt, vajadzētu arī kodā likt normālas atkāpes un atsevišķās vietās tukšas rindiņas, lai kods ir pārskatāmās. Savādāk ir viena liela putra.

 

Paldies par ieteikumu, man iepriekš bija pašam iktas pēdiņas, bet tad es papētīju dažus skriptus un liku kopā ar quote_smart.

 

Esu redzēji ka pēdiņas liek šādās vietās

 

$query = "SELECT `a`, `b` FROM `table` WHERE `a` = '" . quote_smart($a) . "'";

 

Tas kaut ko maina?

Edited by forSilence

Share this post


Link to post
Share on other sites

Sk.. Vēlējos paprasīt, kā var ievietot datus datubāzē nepārlādējot lapu. Zinu ka to var panākt ar js piem Query notiek kaut kāda <div id="kkas"></div> "klucī". Vēlētos dabūt gatavu skriptu, jo neribu sākt mācīties vairākas valodas uz reiz.

Share this post


Link to post
Share on other sites

nu es istieku tikai ar mysql_real_escape_string lai izsargatos no sql injekcijam.

Edited by Blitz

Share this post


Link to post
Share on other sites

Ja magic_quotes_gpc ir ieslēgts, tad viņs automātiksi visam $_REQUEST[] (t.b., $_POST[] + $_GET[]) uztaisīs stripSlashes(). Es labāk to darītu manuāli. Izslēgt vari to šādi...

 

if( get_magic_quotes_runtime() ) {

   set_magic_quotes_runtime( false );

}

 

Ja ir izslēgts, tad ir jāliek! Savādāk, ja stringā, kurš tiks sūtīts uz datubāzi kā pieprasījums būs '\', bet tas nebūs escape'ots - '\\', tad var sanākt nelabi... =)

 

P.S. Nemāku ar Linux uzrakstīt '\'. Meklēju Google pēc atslēgas vārdiem 'backslash'. =D=D

Edited by daGrevis

Share this post


Link to post
Share on other sites

funkcijā var piemest klāt, lai uz php5.3 nesākas brīnumi.

if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())

 

Kā drošības caurumu var uzskatīt "or die (mysql_error());"

 

Nevienam citam tavus mysql_errorus nevajag redzēt. Kā arī vispār liekas dumji likt lapās pie kļūdām die();

 

Un vēl - meta tagiem jābūt <head> daļā.

 

P.S. daGrevis, slashus jau noņem quote_smart funkcija ar

if (get_magic_quotes_gpc()) {
 $value = stripslashes($value);
 }

Edited by indoom

Share this post


Link to post
Share on other sites

Ja magic_quotes_gpc ir ieslēgts, tad viņs automātiksi visam $_REQUEST[] (t.b., $_POST[] + $_GET[]) uztaisīs stripSlashes(). Es labāk to darītu manuāli. Izslēgt vari to šādi...

 

if( get_magic_quotes_runtime() ) {

   set_magic_quotes_runtime( false );

}

magic_quotes_gpc nevar izslēgt caur php, as jamās tiek izmantotas pirms scripta

par inputa $_{GET,POST,COOKIES,REQUEST} eskeipošanu atbild tieši jamās

izslēdzam php.ini (x)or .htacess visu ar magic_quotes_* saistīto herņu.

 

autoram:

raujam podā mysql_* paplašinājumus un izmantojam http://www.php.net/PDO ar parametrizētiem kvērījiemm!!

Share this post


Link to post
Share on other sites

magic_quotes_gpc nevar izslēgt caur php, as jamās tiek izmantotas pirms scripta

par inputa $_{GET,POST,COOKIES,REQUEST} eskeipošanu atbild tieši jamās

izslēdzam php.ini (x)or .htacess visu ar magic_quotes_* saistīto herņu.

 

autoram:

raujam podā mysql_* paplašinājumus un izmantojam http://www.php.net/PDO ar parametrizētiem kvērījiemm!!

 

Pārlasi manuāli un atslābinies ar Savu PDO.

 

http://lv.php.net/manual/en/function.get-magic-quotes-runtime.php

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...