עבור לתוכן

הגנה נגד SQL Injections

Featured Replies

פורסם

שלום,

יש לי שרת ויש לנו Account manager שרשום בPHP, עכשיו כל יום כמעט פורצים לנו דרכו לSQL והם יכולים: לשנות סיסמאות, למחוק databases וכו'.

שינינו את ההגדרות של SQL Server 2005 שלא יהיה אפשרי remote וחסמנו את פורט 1433 והם עדיין יכולים לפרוץ.

השאלה איך לעשות את הPHP Code של הAccount manager בטוח ?

שמעתי שיש משהו שנקרא : mysql escape string אבל לא יודע איך לרשום את זה והאם להוסיף את זה רק לindex.php או לכל הקבצים שנכתבו בPHP.

תודה רבה,

אבי

פורסם

sql injections הינם באגים בקוד הphp שלכם

איזה מערכת php מריץ השרת שלכם

משהו שאתם בניתם? או משהו בנוי

אם זה בנוי, מומלץ לעדכן תיקוני אבטחה, אם לא, מומלץ לתקן בעצמכם, אם תשתפו את הקוד, ניתן יהיה לעזור

פורסם
  • מחבר

זה אנחנו בנינו.

יש את כל העדכוני אבטחה ממיקרוסופט.

אוקיי הנה הקוד של index.php :

<?PHP
define('XPT_MANAGER_SECURITY', 1);

session_start();

require_once 'configuration.php';
require_once 'includes/odbc.php';
require_once 'includes/function.php';
require_once 'includes/function.account.php';
require_once 'includes/function.character.php';

$Session = G('s');

// Logout
if($Session === 'logout') destroy_user_session();

$Logged = isset($_SESSION['user_id']) && $_SESSION['user_id'] !== false;

$Output = false;

// Manager opened
if($Configuration_Opened)
{
// Manager
if($Logged)
{
require_once 'modules/manager.php';
}
// Login + Register
else
{
require_once 'modules/login.php';
}
}
// Manager closed
else
{
require_once 'modules/closed.php';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">[/url]
<html xmlns="[url]http://www.w3.org/1999/xhtml">[/url]
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><?PHP echo $Configuration_Version; ?></title>
<link rel="stylesheet" media="screen" type="text/css" title="styles" href="css/manager.css" />
<link rel="stylesheet" media="screen" type="text/css" title="styles" href="css/form.css" />
<link rel="stylesheet" media="screen" type="text/css" title="styles" href="css/box.css" />
<script type="text/javascript" src="javascript/prototype.js"></script>
<script type="text/javascript" src="javascript/scriptaculous.js"></script>
<script type="text/javascript" src="javascript/validation.js"></script>
<script type="text/javascript" src="javascript/javascript.js"></script>
</head>
<body>
<div class="body">
<?PHP echo $Output; ?>

<p class="footer"><?PHP echo $Configuration_Version; ?> - © LightPT</p>
</div>
</body>
</html>
<?PHP myodbc_close_connection(); ?>

פורסם

זה לא הקוד הרלוונטי, צריך את החלק בקוד שבונה את שאילתות ה-sql.

פורסם

הפתרון הנכון הוא אף פעם לא לבנות שאילתות SQL באמצעות שרשור מחרוזות שמכילות את הקלט של המשתמש, אלא תמיד באמצעות prepared statements. באופן זה, mysql בעצמו מונע את ה-sql injections.

חפש בגוגל על mysql php prepared statements.

פורסם

דרך נוספת היא לבדוק סימנים מוסכמים:

; מופיע פעם אחת

פעולה וFROM מופיע פעם אחת

הכל תלוי בשימוש שלכם.

פורסם
  • מחבר

תודה לכולם על ההצעות , אני הולך ללמוד עליהם ולנסות אותם.

שאלתי גם בפורום מחו''ל של PHP ואמרו לי :

"you basically will need to put mysql_real_escape_string() around any input that comes from the user and goes into a database query"

מה שהם אמרו יעבוד ?

פורסם

only on mysql db

פורסם
  • מחבר

אבל אני משתמש בSQL Server 2005, זה נקרא mysql ?

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים