PHP рд╕реБрд░рдХреНрд╖рд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ

рдпрд╣ рд╕рд╛рдордЧреНрд░реА рд╢реБрд░реБрдЖрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рд╣реИред



рд╕рд╛рдордЧреНрд░реА









рддреНрд░реБрдЯрд┐ рдкреНрд░рджрд░реНрд╢рди



рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдБ:

рдЪреЗрддрд╛рд╡рдиреА: рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕реНрдерд┐рд░ LOCAL_SERVER рдХрд╛ рдЙрдкрдпреЛрдЧ - рд▓рд╛рдЗрди 13 рдореЗрдВ /web/includes/page-definitions.php рдореЗрдВ 'LOCAL_SERVER' рдорд╛рди рд▓рд┐рдпрд╛ рдЧрдпрд╛





рдпрд╣ рдорд╛рдирдХ PHP рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдмрджрд╕реВрд░рдд рд╣реИ; b) рд╕рдВрднрд╛рд╡рд┐рдд рдЦрддрд░рдирд╛рдХред

рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рджрдЦрд▓ рдФрд░ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, error_reporting рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ (error_reporting (0)) рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕реНрдерд┐рд░ E_ALL рд╣реИред

рдкрд╛рдВрдЪрд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдирд┐рд░рдВрддрд░ E_STRICT рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬреЛ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдЦреНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред

рдмреЗрд╢рдХ, рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ E_ALL рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди error_reporting (8191) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдЫрдареЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдирдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рддрдХ, рд╕рдм рдХреБрдЫ рдЕрд╡рд╢реЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред



рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рджреЗрдВ: error_reporting (E_ALL | E_STRICT) рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рддрдм PHP 4 рд╢рдкрде рдЧреНрд░рд╣рдг рдХрд░реЗрдЧрд╛, рди рдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд░ рдХрд┐ E_STRICT рдХреНрдпрд╛ рд╣реИред рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред





рд╣рдо DEBUG рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рдирд┐рд░рдВрддрд░ рд╕реЗрдЯ, рдФрд░, set_error_handler рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реА рд╕реЗрд╡рд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдВрдЧреЗред рд╡реИрд╕реЗ, рдЖрдкрдХрд╛ рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯрд░ рд╕рд╣реА рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ PHP рдПрдХ рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧрд╛ред



рдкрд░рд┐рдгрд╛рдо:

(рдкрд╛рдВрдЪ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреА рдкрд╕рдВрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ: in_array, рд╕реБрдВрджрд░ рдФрд░ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рд┐рдЪ рдХреЗрд╕ рдХрд╛ рдорд╛рдорд▓рд╛ рддреЗрдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд╕реВрд░рдд рд╣реИред рд╕реМрдВрджрд░реНрдп рдПрдХ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рдорд╛рдорд▓рд╛ рд╣реИ ...

	<?php

		error_reporting(8191);
		if (!DEBUG)
		{
			function errorHandler ($errno, $errstr, $errfile, $errline)
			{
				//        .

				if	($errno == E_ERROR ||
					$errno == E_PARSE ||
					$errno == E_CORE_ERROR ||
					$errno == E_COMPILE_ERROR ||
					$errno == E_USER_ERROR)
				{	
					//  . , ┬л,  ┬╗...

				}
				return true;
			}
			set_error_handler('errorHandler');
		}
	?>
	
      
      









register_globals



4.2.0 register_globals PHP .

, , , PHP if ($username == 'admin')тАж



, .

POST, GET, COOKIE superglobals $_POST, $_GET, $_COOKIE.

import_request_variables, .

.

.



register_globals:

	<?php
		...
		if (check_admin($..., $...))
		{
			...
			$user_level = 169;
		}
		...
		if ($user_level > 150)
		{
			echo 'Boom!';
		}
	?>
	
      
      





тАФ , $user_level

( 0 , , 0 ),

foo.php?user_level=999 .





SQL injection magic_quotes





	<?php
		$user = mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `username` = '{$_POST['username'}' AND `password` = '{$_POST['password']}'"));
	?>

	
      
      





. ' OR `username` = 'admin, .



, , .

, - , SQL injection.

PHP , , , escape ( , addslashes).

? . , . , .

, 100- SQL injection.



. ) , . ) , SQL mysql_real_escape_string ( ).



:

	<?php
		{
		if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
		{
			function stripslashes_deep($value)
			{
				if(is_array($value))
				{
					$value = array_map('stripslashes_deep', $value);
				}
				elseif (!empty($value) && is_string($value))
				{
					$value = stripslashes($value);
				}
				return $value;
			}
	
			$_POST = stripslashes_deep($_POST);
			$_GET = stripslashes_deep($_GET);
			$_COOKIE = stripslashes_deep($_COOKIE);
		}
	}
	?>

	
      
      







(mysql_real_escape_string тАФ , . ?)

	<?php
		function quote($value) {
			if (!is_numeric($value)) {
				$value = "'".mysql_real_escape_string($value)."'";
			}
			return $value;
		}
	?>

	
      
      





. - SQL, quote:

	<?php
		$user = mysql_fetch_assoc(mysql_query('SELECT * FROM `users` WHERE `username` = '.quote($_POST['username']).' AND `password` = '.quote($_POST['password'])));	
	?>

	
      
      











, .

.



, .

, , .



	<?php
		if (are_bad_symbols($data)) boo();
	?>
	
      
      







	<?php
		if (!all_good_symbols($data)) boo();
		// :
		is_numeric($data);
		preg_match('/[a-z0-9_-]*/i', $data)
		...
	?>

	
      
      





, .

, - %00 , , , .



, , , , .

.

.



, .

include, require, readfile, eval, ``, system, exec, create_function, dir, fopen .

, , , , тАФ - .

	<?php
		include($_GET['module'] . '.php');
	?>
	
      
      





. '../../../../../etc/passwd%00', , тАФ -.





, cookies , , .

, , тАФ .

cookies ID.

PHP , .

	<?php
		session_start();
		$_SESSION['userid'] = 168;
		session_write_close();
	?>
	
      
      







, cookies - , ?







$_GET, $_POST, $_COOKIE, .

Trust no one! :)




All Articles