Разработка безопасных проектов с использованием Bitrix Framework. Смирнов Максим Ведущий программист «1С-Битрикс»
Безопасность Безопасность среды Безопасность платформы Внешний аудит безопасности Виртуальная машина и веб-окружение OTP Монитор безопасности Безопасный API 2005 2006 2007 2008 2009 2010 2011 2012 Аудит безопасности сайтов Создание внутреннего отдела безопасности Проактивный фильтр WAF Проактивная защита Безопасность платформы Безопасность партнерских разработок
Безопасность Проактивная защита Платформа Разработки партнера Хостинг и администрирование Проактивная защита
Потоки данных
Проактивный фильтр
$DB->ForSql $DB->ForSqlLike intval SQL 1 <?php 2 class CMyService 3 { 4 function deleteById($ID) 5 { 6 global $DB; 7 return $DB->Query('DELETE from b_my_service 8 WHERE ID = \''.$DB->ForSql($ID).'\''); 9 } 10 function deleteByName($NAME) 11 { 12 global $DB; 13 return $DB->Query('DELETE from b_my_service 14 WHERE NAME like ''.$DB->ForSqlLike($NAME).'\''); 15 } 16 } SQL $DB->ForSql $DB->ForSqlLike intval
$DB->PrepareUpdate SQL - рекомендуем $DB->Add $DB->PrepareUpdate 1 <?php 2 class CMyService 3 { 4 function add($arFields) 5 { 6 global $DB; 7 return $DB->Add("b_my_service", $arFields); 8 } 9 10 function update($ID, $arFields) 11 { 12 global $DB; 13 $ID = intval($ID); 14 $strUpdate = $DB->PrepareUpdate("b_my_service", $arFields); 15 if ($strUpdate != "") 16 { 17 if (!$DB->Query("UPDATE b_my_service SET ".$strUpdate." WHERE ID=".$ID)) 18 return false; 19 } 20 return true; 21 } 22 }
$DB->PrepareUpdate 1 <?php 2 if( 3 $_SERVER["REQUEST_METHOD"] == "POST" 4 && check_bitrix_sessid() //CSRF protection 5 ) 6 { 7 /* WRONG */ 8 //$DB->Add("b_my_service", $_POST); 9 /* RIGHT */ 10 $DB->Add("b_my_service", array( 11 "NAME" => $_POST["NAME"], 12 "SORT" => $_POST["SORT"], 13 )); 14 LocalRedirect($APPLICATION->GetCurPageParam()); 15 } Внимание! «~»! $DB->Add $DB->PrepareUpdate
CUtil::PhpToJSObject GetMessageJS htmlspecialcharsEx CUtil::JSEscape CUtil::PhpToJSObject GetMessageJS htmlspecialcharsEx htmlspecialcharsbx urlencode CHTTP::urnEncode 1 <!--JavaScript escape demo--> 2 <script> 3 var mess = '<?echo GetMessageJS("MESSAGE_ID")?>'; 4 var str = '<?echo CUtil::JSEscape($str)?>'; 5 var arResult = <?echo CUtil::PhpToJSObject($arResult)?>; 6 </script> 7 <!--HTML attributes values--> 8 <label for="<?echo htmlspecialcharsbx($id)?>" 9 onclick="<?echo htmlspecialcharsbx("alert(\"".CUtil::JSEscape($message)."\")");?>"> 10 <!--HTML between tags--> 11 <?echo htmlspecialcharsEx($preview);?> 12 </label> 13 <!--HTML inside textarea demo--> 14 <textarea id="<?echo htmlspecialcharsbx($id)?>"><?echo htmlspecialcharsbx($text);?></textarea> 15 <!--HTML "a" tag, href attribute--> 16 <a href="<?echo 17 htmlspecialcharsbx( 18 CHTTP::urnEncode($page)."?".urlencode($parameter)."=".urlencode($value) 19 ); 20 ?>"></a>
$io->ValidatePathString Файлы - CBXVirtualIo $io->CombinePath $io->ValidatePathString 1 <?php 2 $io = CBXVirtualIo::GetInstance(); 3 if( 4 $_SERVER["REQUEST_METHOD"] == "POST" 5 && check_bitrix_sessid() //CSRF protection 6 && $_REQUEST["action"] === "import" 7 ) 8 { 9 $pathWithinRoot = $_SERVER["DOCUMENT_ROOT"].$io->CombinePath("/", $_POST["path"]); 10 if ($io->ValidatePathString($pathWithinRoot) && $io->FileExists($pathWithinRoot)) 11 { 12 $h = $io->OpenFile($pathWithinRoot, "rb"); 13 if (is_resource($h)) 14 { 15 //TODO: import here 16 } 17 } 18 LocalRedirect($APPLICATION->GetCurPageParam()); 19 }
CTempFile::GetFileName автоматическое удаление CTempFile::GetDirectoryName можно задать время хранения 1 <?php 2 $io = CBXVirtualIo::GetInstance(); 3 if( 4 $_SERVER["REQUEST_METHOD"] == "POST" 5 && check_bitrix_sessid() //CSRF protection 6 && $_REQUEST["action"] === "export" 7 ) 8 { 9 $tempFilePath = CTempFile::GetFileName("export.csv"); 10 CheckDirPath($tempFilePath); 11 $h = $io->OpenFile($tempFilePath, "w"); 12 if (is_resource($h)) 13 { 14 //TODO: export here 15 CFile::ViewByUser(CFile::MakeFileArray($tempFilePath)); 16 } 17 LocalRedirect($APPLICATION->GetCurPageParam()); 18 }
Вопросы? Спасибо за внимание! Twitter: @qMBQx8GH Skype: mv.smirnov E-mail: max@bitrix.ru