نوشته اصلی از سوی
folaani
خب حالا دیگه زیاد از خودم تعریف نکنم.
بهرحال کار سختی بود و حتی اینم نمیتونم بگم آخر کامل و بی نقصه؛ باگ هم که ممکنه بهرحال هر برنامه ای داشته باشه. خطای انسانی رو همه و در هر برنامه ای هرچقدر هم که دقت بکنن میشه پیدا کرد.
من یک نگاه سرسری برای باگها انداختم, تا اینجا به نگر فرزام[1] میاید (تنها یک گیر کوچک اینجا شاید داشته باشی):
کد PHP:
function quote_smart($value, $identifier=false)
{
if(!is_numeric($value)) {
//if(get_magic_quotes_gpc()) $value = stripslashes($value);
if(!$identifier) return "'" .mysql_real_escape_string($value) . "'";
else if(strpos($value, '`')===false) return '`' .$value . '`';
else {
$this->error("Value contains invalid character (backtick - '`') for identifiers");
return false;
}
}
اینجا با اینکه بسیار خوب کارو انجام دادی و query پایانی هم quote میشود, همچنان ولی جا برای injection هست, اگر که mysql روی سرور یکی از encodingهایِ زیر را ببیوسد[2]: GBK or BIG-5
php - SQL injection that gets around mysql_real_escape_string() - Stack Overflow
در این ریخت ما هنوز میتوانیم یک ' در query رد کنیم و login را بپیچانیم (:
رویهمرفته کد براستی پیشهای نوشته شده و نکتههایِ امنیتی کمابیش همگی به کار رفتهاند, از globals گرفته تا access و .., همانجور هم که گفتی بیشمار
ساماندهی (configs) آنجاست و به درد یک پروژهیِ بزرگ میخورد.
با همهیِ اینها من فرزامگرایی[3] بیش از اندازهای در کدت میبینم که به نگرم برای همان خودنمایی بوده باشد ((:
نکتهیِ crypt_random ٸه دستکاری شده چیه؟ درگاشت[4] را از کجا گرفتهای؟
چیزیکه من یافتم:
کد PHP:
@$request_entropy=sha1(microtime().$pepper.$_SERVER['REMOTE_ADDR'].$_SERVER['REMOTE_PORT'].$_SERVER['HTTP_USER_AGENT'].serialize($_POST).serialize($_GET).serialize($_COOKIE));
اگر تنها این باشد میشود گفت خوبه, ولی همچنان درگاشت نابِ ناب نیست و هنوز اسپاش[5] به اندازهیِ بسنده random نیست.
من پیشتر یک خوارزم[6] رازنگاری نوشته بودم برای rsa که درگاشت را از cpu میگرفت, نمیدانم روی php چه اندازه دسترسی به hardware داریم, ولی
این ورتندهها[7] (time, remote_addr, serialaized post, etc) همگی هنوز پیشبینیپذیر میباشند و به اندازهای که باید و شاید درگاشت[4] را بزرگ نمیکنند (:
----
1. ^ Farzâm || فرزام: بی عیب و نقص; کامل Ϣiki-En Perfect
2. ^ Bayusidan || بیوسیدن: چشمداشتن, انتظار بردن To expect
3. ^ Farzâmgerâyi (farzâm+gerâ+yi) || فرزامگرایی: گرایش به فرزامی; کمالگرایی Ϣiki-En, Dehxodâ Perfectionism
4. ^ آ ب Dargâšt || درگاشت: آنتروپی Ϣiki-En, Ϣiki-Pâ Entropy
5. ^ Espâš || اسپاش: فضا Ϣiki-En, www.loghatnaameh.org Space
6. ^ Xvârzmidan || خوارزمیدن: الگوریتم کردن To algorithmize
7. ^ Vartande || ورتنده: متغیر Ϣiki-En Variable