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