ایجاد امنیت برای لینکهای که توی فرم وارد می شه

i-php-i

Active Member
ایا استفاده از تابع htmlentities به منظور ایجاد امنیت برای لینکها کار درستی هست؟
 

mtchabok

Member
برای تمامی قسمتهای یه لینک نه درست نیس .
هر لینک شامل موارد زیر هس :
scheme://user:p[email protected]:port/path?query#fragment
خوب اگه از این تابع برای یه لینک استفاده بکنید در بسیاری موارد درست عمل میکنه ولی در برخی از آدرسها جواب خوبی نمیده . مثلا:
کد:
$link = 'http://download.site.com/player/mobile?id=12&body=<help>ok</help>';
echo htmlentities($link); // http://download.site.com/player/mobile?id=12&amp;body=&lt;help&gt;ok&lt;/help&gt;
خوب حالا اگه کسی بخواد اذیتت کنه میتونه این آدرس رو بنویسه :
کد:
http://download.<a>site</a>.com/player/mobile?id=12&body=<help>ok</help>
 

iran-TEC

Member
جلوی xss رو می گیره ولی injection ها یک راه حل دیگه داره برای injection از تابع زیر استفاده کنید
PHP:
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
    {
      $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
      $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
      switch ($theType) {
        case "text":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "long":
        case "int":
          $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case "double":
          $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
          break;
        case "date":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "defined":
          $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
          break;
      }
      return $theValue;
    }
و روش استفاده
PHP:
GetSQLValueString($value, "text");
برای سایر متغیرها به جای text نوع متغیر رو می ذاری
برای xss هم کتاب زیر رو مطالعه کن بسیار مفید است

 

پیوست ها

i-php-i

Active Member
جلوی xss رو می گیره ولی injection ها یک راه حل دیگه داره برای injection از تابع زیر استفاده کنید
برای جلوگیری از اینجکشن کار رو ساده کردم و اول از تابع htmlentities و بعد از تابع mysql_real_escape_string استفاده می کنم. دیگه کاری به نوع متغیر و ... ندارم. این راه بنظرتون مناسب هست یا نه؟
 

iran-TEC

Member
با استفاده از این تابع شما می تونید دستورات sql رو به صورت زیر بنویسید و هیچ دغدغه ای حداقل برای inject شدن نداشته باشید
PHP:
$sql = sprintf("UPDATE test_table SET field1 = %s WHERE field2 = %s",
                   GetSQLValueString($_POST['field1'],'text'),
                   GetSQLValueString($_POST['field2'],'int'));
 

جدیدترین ارسال ها

بالا