אוקי
בשביל לסדר הגנה מינימלית
אתה חייב להשתמש בפונקציות
htmlspecialchars
addslashes או mysql_escape_string לחליפין
מה שבעצם הפונקציה htmlspecialchars עושה היא מחליפה תווים מיוחדים לתווים של HTML
'
&' הופך להיות '&'
'"' הופך להיות '"' כאשר ENT_NOQUOTES לא מוגדר.
''' הופך להיות ''' רק כאשר ENT_QUOTES מוגדר.
'<' הופך להיות '<'
'>' הופך להיות '>'
עכשיו נגיד ואני שולח הודעה אצלך במערכת התגובות
דוגמא:
קוד: בחר הכל
<script type="text/javascript">
alert('I Jest Submited an javascript code');
</script>
ללא הפונקציה htmlspecialchars
הסקריפט ששלחתי יעבוד בכל פעם שמשתמש יכנס לדף
ואני יכול פשוט לעשות כל מה שבא לי מבחינת HTML ו JAVASCRIPT
עם הפונקציה htmlspecialchars
הקוד ששלחתי יהפוך להיות ללא תווים מיוחדים
ומה שבעצם אתה תראה בתגובה שלי זה את הקוד בתור טקסט
זה הקוד שאתה צריך להשתמש
קוד: בחר הכל
<?php
$username = mysql_escape_string(htmlspecialchars($_POST['username']));
$tgov = mysql_escape_string(htmlspecialchars($_POST['tgov']));
$date = date("d/m/y");
$php_message = '';
if (isset($_POST['submit']))
{
if (empty($username) || empty($tgov))
{
$php_message = "<span style='color: red;'>יש למלות את כול הטופס בכדי לשלוח את ההודעה!</span>";
}
else
{
$sql = "INSERT INTO `X`
(`username`,`tgov`,`date`) VALUES ('{$username}','{$tgov}','{$date}')";
if(mysql_query($sql))
{
$php_message = "<span style='color: green;'>ההודעה נשלחה בהצלחה!</span>";
}
else
{
die(mysql_error());
}
}
echo $php_message;
}
?>
למידע נוסף על הפונקציה תקרא קצת במדריך של PHP.NET
http://php.net/manual/en/function.htmlspecialchars.phpהפונקציות addslashes או mysql_escape_string לחליפין
מבצעות הוספת סלשים לפני תווים שעלולים לגרום לבאגים (או לניסיונות פריצה לאתרים) בשימוש עם SQL
כלומר אם נגיד ואני שולח את התגובה הבא:
Is your name O'reilly?
הפונקציה תחזיר לי את הערך הבא
Is your name O\'reilly?
היא הוסיפה סלש לפני הגרש
זה מונע משגיאת SQL
כי אם לא הייתי מבצע את הפעולה הזאת הערך שנשלח היה גורם לשאילתא להראות ככה
קוד: בחר הכל
INSERT INTO `X` (`username`,`tgov`,`date`) VALUES ('My name','Is your name O'reilly?','1/1/2010')
שים לב שהגרש קוטע את השאילתא