بازدید نسخه کامل شده : راهی وجود داره که به فیلد از نوع file مقدار اولیه بدیم ؟
NabiKAZ
13 اسفند 1385, 19:50
راهی وجود داره که به فیلد از نوع file مقدار اولیه بدیم ؟
منظورم اینه:
<input type="file" name="F1" size="20">
برای فرمی که قراره اتوماتیک submit بشه نیاز دارم.
میگن با استفاده از DOM میشه.
mazoolagh
14 اسفند 1385, 15:17
فکر نمیکنم بشه - اگر هم بشه ضعف امنیتی محسوب میشه!
mohseni12345
14 اسفند 1385, 22:18
با نظر mazoolagh موافقم
اگه بشه ، این یه ضعف امنیتی میشه
چون شما می تونی یه فایل رو بدون اجازه کاربر اپلود کنی
NabiKAZ
17 اسفند 1385, 03:38
چه ربطی به امنیت داره !
چرا فکر میکنید بدون اجازه کاربر میشه عکس آپ لود کرد !
ببینید مثل فرم text میشه .
همونطور که مینویسید:
<input type="text" name="salam" value="salam">
و فیلد salam مقدار اولیه میگیره ، حالا برای فیلد از نوع file هم میخوایم مقدار اولیه داشته باشیم .
نهایتا که باید دکمه سابمیت رو کاربر کلیک کنه و اطلاعات ارسال شده (نوشته و یا عکس) روی سرور پردازش بشه ، پس هیچ مشکل امنیتی وجود نخواهد داشت.
ضمنا حدس میزنم توسط javascript و DOM بشه اینکار رو انجام داد.
mohseni12345
17 اسفند 1385, 20:02
ضعف امنیتی محسوب میشه چون شما می تونید به اون مقدار اولیه بدید مثلا ادرس یه فایل و بعد از طریق جاوا اسکریپت اون رو به صورت اتوماتیک submit کنید. این یعنی اینکه شما بدون اجازه کاربر فایل رو اپلود کردید
mazoolagh
17 اسفند 1385, 22:19
آقا شما که حرف ما (من و آقا محسن) رو قبول نداری - حداقل امتحانش کن!
یعنی با js بهش value بده ، ببین کار میکنه یا نه؟
NabiKAZ
21 شهريور 1386, 01:51
ضعف امنیتی محسوب میشه چون شما می تونید به اون مقدار اولیه بدید مثلا ادرس یه فایل و بعد از طریق جاوا اسکریپت اون رو به صورت اتوماتیک submit کنید. این یعنی اینکه شما بدون اجازه کاربر فایل رو اپلود کردید
ببخشيد که دارم اينجا پست ميدم ، ميدونم تاپيک خيلي قديميه اما چون هنوز به جواب مشخص نرسيده با اجازه پاسخ ميدم.
راستش اين تاپيک از دستم در رفته بود.
عزیزم یکم بیشتر فکر کن ! اصلا ربطی به امنیت نداره !
شما میگید اگر میشد، یه مقدار اولیه میدادیم و با جاوا فرم رو ثابمیت میکردیم ! خب مگر الان در مورد فیلدهای از نوع text نمیشه همچین کاری کرد ؟ یه مقدار بدیم و با جاوا سابمیت کنیم ، اینکار هم باعث میشه مثلا یه رکورد به بانک اطلاعاتی اضافه بشه.
از نظر شما فرقی داره که توسط یه ربوط ، یه رکورد به دیتابیس اضافه بشه یا یه فایل آپ لود بشه؟
از طرف دیگه ، اگر روی سایتی فرمی وجود داشته باشه که شما اینکار رو در موردش اجرا کنید. مطمئناً اون فرم برای آپ لود فایل های شما ساخته شده ، پس فرقی نمیکنه که شما مقدار بهش بدید و سابمیت کنید ، یا اینکه جاوا اسکریپت یا یه ربوط یا هر شکل دیگه ای که مقدار دهی بشه و سابمیت بشه...
اگر هم فرمی برای این منظور وجود نداشته باشه ، شما هر چقدر هم یه فیلد از نوع فایل ، رو مقدار اولیه بدید و مخفیانه به همراه اطلاعات دیگر فرم به سرور ارسال کنید (سابمیت کنید) باز هم اتفاق خاصی رخ نخواهد داد، چون کد نوشته شده سمت سرور با فیلد از نوع فایل کاری ندارد و اون کار خودش رو با سایر فیلدها انجام میده.
نمیدونم تونستم مسئله امنیت رو براتون باز کنم ؟
تشکر
نبی
NabiKAZ
21 شهريور 1386, 01:57
آقا شما که حرف ما (من و آقا محسن) رو قبول نداری - حداقل امتحانش کن!
یعنی با js بهش value بده ، ببین کار میکنه یا نه؟
بالا توضیح دادم که چرا قبول ندارم.
اگر دقیقاً میدونستم چطوری میشه مقدار داد که سوال نمیکردم :-d
اما تا اونجایی که زورم میرسید با js و dom سعی کردم موفق نشدم.
از پاسخ دوستان ممنونم.
نبی
mohseni12345
21 شهريور 1386, 22:39
با vb script میشه هارد رو جستجو کرد و به اون دسترسی پیدا کرد
اگه بشه به فیلد فایل مقدار پیشفرض داد ، میشه یه فایل با پسوند خواص رو بدون اجازه اپلود کرد
فرض می کنیم یه برنامه که حاوی اطلاعات مهم هست تمام اطلاعات خودشو توی یه فایل به صورت بانک داده هست میریزه
مثلا با پسوند *.db *.mdf یا فایل اکسس یا . .......
معمولا برنامه ها توی یه ادرس مشخصی نصب میشند، مثلا توی پوشه ی program files و در پوشه مخصوص خودشون ،مثل
E:\Program Files\Opera
اینجوری ما ادرس اون فایل رو پیدا می کنیم و با جاوا اسکریپت یا وی بی اسکریپت اون رو به فیلد فایل می دیم و اتوماتیک سابمیت می کنیم
بازم مثال بزنم؟
نمیدونم این حسن منه یا بدی من که فقط برای خراب کاری و کار های خلاف مغزم کار میکنه
bahy_my
22 شهريور 1386, 23:12
سلام.
الان نصف شبه من حالم خوش نیست نمی دونم دارم چی می نویسم :
<script>
function ddd(id){
document.getElementById(id).focus;
this.value='myvalue';
alert(this.value);
}
</script>
<body>
<input type="file" id='f1' onClick="ddd('f1');">
</body>
باطناً نمی دونم یا ظاهراً که کار می کنه.
باید توی سرورساید امتحانش کرد تا دید چی میشه !
mohseni12345
23 شهريور 1386, 01:23
سلام.
الان نصف شبه من حالم خوش نیست نمی دونم دارم چی می نویسم :
<script>
function ddd(id){
document.getElementById(id).focus;
this.value='myvalue';
alert(this.value);
}
</script>
<body>
<input type="file" id='f1' onClick="ddd('f1');">
</body>
باطناً نمی دونم یا ظاهراً که کار می کنه.
باید توی سرورساید امتحانش کرد تا دید چی میشه !
اینجوری امتحان کن
<script>
function ddd(id){
document.getElementById(id).focus;
this.value='myvalue';
}
function m(){
alert(document.getElementById('f1').value);
}
</script>
<body>
<input type="file" id="f1" onclick="ddd('f1');" />
<input type="button" onclick="m();" value="show value" />
</body>
bahy_my
23 شهريور 1386, 09:04
می دونستم یه جای کار اشکال داره.
نمیشه با اینپوت hidden یه کارایی کرد ؟
NabiKAZ
23 شهريور 1386, 12:14
سلام.
الان نصف شبه من حالم خوش نیست نمی دونم دارم چی می نویسم :
<script>
function ddd(id){
document.getElementById(id).focus;
this.value='myvalue';
alert(this.value);
}
</script>
<body>
<input type="file" id='f1' onClick="ddd('f1');">
</body>
باطناً نمی دونم یا ظاهراً که کار می کنه.
باید توی سرورساید امتحانش کرد تا دید چی میشه !
البته کدت کار نمیکنه و مشخصه که اشتباس ، اما من متوجه منظورت شدم .
خیلی ساده تر میشه اینطور نوشت:
<input type="file" onClick="this.value='c:\\salam.txt';">
اما این کد کار نمیکنه.
اما در مورد نوع type=text جواب میده:
<input type="text" onClick="this.value='c:\\salam.txt';">
شاید بشه اینطور نتیجه گیری کرد که اصلاً متد value برای فیلدهای از نوع file پیشبینی نشده، یعنی اصلاً ساپورتش نمیکنه.
ضمنا سرورساید نه، کلاینت ساید، میزاریم پای حساب ناخوشیت http://qsmile.com/qsimages/38.gif
همیشه سلامت باشی
نبی
bahy_my
23 شهريور 1386, 13:39
سلام
:D
شاید بشه اینطور نتیجه گیری کرد که اصلاً متد value برای فیلدهای از نوع file پیشبینی نشده، یعنی اصلاً ساپورتش نمیکنه.
این که از اول مشخص بود.. منتها من فکر کردم شما دنبال یه راهی هستی که اینو دور بزنی.
اما باید یاد آور شد که اگه شما با دکمه browse یه مسیر بهش بدی اون وقت ساپورتش می کنه !!.. این از عجایب html هست.
ضمنا سرورساید نه، کلاینت ساید، میزاریم پای حساب ناخوشیت
قربونت, اما اینم کاملاً درسته : $_POST['file_inp'];
NabiKAZ
23 شهريور 1386, 15:42
اینجوری امتحان کن
<script>
function ddd(id){
document.getElementById(id).focus;
this.value='myvalue';
}
function m(){
alert(document.getElementById('f1').value);
}
</script>
<body>
<input type="file" id="f1" onclick="ddd('f1');" />
<input type="button" onclick="m();" value="show value" />
</body>
ببخشید قبل از اینکه اینو بخونم من پست بالا رو ارسال کرده بودم.
امتحان کردن این کد خیلی کمتر طول میکشه تا نوشتنش!
تست میکردی متوجه میشدی جواب نمیده. (شبیه کدیه که خیلی مختصر بالاتر نوشتم.)
البته مقدارش رو برمیگردونه که هدف نیست ، اما بهش مقداری نسبت نمیده.
تشکر
NabiKAZ
23 شهريور 1386, 15:45
می دونستم یه جای کار اشکال داره.
نمیشه با اینپوت hidden یه کارایی کرد ؟
فیلد hidden هیچ فرقی با فیلد text نداره ، فقط مخفیه.
چه راهی؟!
NabiKAZ
23 شهريور 1386, 15:49
با vb script میشه هارد رو جستجو کرد و به اون دسترسی پیدا کرد
اگه بشه به فیلد فایل مقدار پیشفرض داد ، میشه یه فایل با پسوند خواص رو بدون اجازه اپلود کرد
فرض می کنیم یه برنامه که حاوی اطلاعات مهم هست تمام اطلاعات خودشو توی یه فایل به صورت بانک داده هست میریزه
مثلا با پسوند *.db *.mdf یا فایل اکسس یا . .......
معمولا برنامه ها توی یه ادرس مشخصی نصب میشند، مثلا توی پوشه ی program files و در پوشه مخصوص خودشون ،مثل
E:\Program Files\Opera
اینجوری ما ادرس اون فایل رو پیدا می کنیم و با جاوا اسکریپت یا وی بی اسکریپت اون رو به فیلد فایل می دیم و اتوماتیک سابمیت می کنیم
بازم مثال بزنم؟
نمیدونم این حسن منه یا بدی من که فقط برای خراب کاری و کار های خلاف مغزم کار میکنه
اگر منظورت این بوده.... پس حالا من یه سوال میپرسم. که شاید پرچم سفید رو بالا ببری !!!!
به نظر شما نمیشه با همون vbscript که ازش صحبت کردی، بجای خود فایل، محتویات اون فایل رو خوند و درون یه textarea ریخت و اونو submit کرد ؟! (کاری که پیش از این انجامش دادم)
آیا فرقی میکنه؟
هوووووم؟! http://qsmile.com/qsimages/50.gif
mohseni12345
23 شهريور 1386, 19:02
اگر فایل شما حاوی متن معمولی باشه و برنامه یا چیز دیگه ای نباشه و تمام کاربران شما از اینترنت اکسپلورر استفاده کنند
بله میشه همچین کاری کرد
البته فکر کنم اینترنت اکسپلورر این جور دستورات رو به عنوان دستورات پر خطر یا بلوک کنه یا به کاربر هشدار بده
تسلیم :-?
اگه برای ویروس نویسی یا تروجان نویسی باشه بد نیست چون ممکنه از هر 2 نفر برای یکیشون بدون مشکل کار کنه
ولی نمی شه اینو به عنوان یه کار مطمئن به مشتری داد
NabiKAZ
24 شهريور 1386, 00:53
اما باید یاد آور شد که اگه شما با دکمه browse یه مسیر بهش بدی اون وقت ساپورتش می کنه !!.. این از عجایب html هست.
منو به شک انداختی! راستی اگر ساپورت نمیکنه ، وقتی بروز زده میشه به خودش مقدار میگیره....
میشه اینطور برداشت کرد که وقتی ما بروز میزنیم و فایل رو انتخاب میکنیم و فیلد مقداری به خودش میگیره ، این پروسه توسط توابع داخلی کامپوننت فیلد file صورت میگیره. مسلماً کاربر به توابع داخلی اون کامپوننت دسترسی ندارد. پس نمیتونه مقداری set کنه. و تنها توابع مربوط به get کردن مقدار فیلد، public هست. اگر این نظریه درست باشه تقریبا این کار غیر ممکن میشه. ولی شاید از طریق handle آبجکت ها و برنامه نویسی پیچیده vbscript و البته نه javascript بشه کاری کرد.
در مورد جمله آخرم برای کسایی که آشنایی ندارند یه توضیح کوچیک میدم. ببینید به عنوان مثال پنجره یه برنامه و یا فیلدهای درون اون رو توسط هیچ تابع خارجی نمیشه مقادیرش رو عوض کرد، مثلاً title یه پنجره رو نمیشه عوض کرد... اما در مثلا vb با گرفتن handle فرم و child ها میشه به تکام اجزاء داخلی فرم دسترسی پیدا کرد و مثلا title فرم رو عوض کرد یا به فیلدهای داخل فرم مقادیری رو نسبت داد. از طرفی چون vbscript خیلی به vb نزدیکه و تقریباً همون توانایی ها رو داره ، ممکنه بشه بوسیله اون همون کاری رو که vb میکنه رو انجام داد و به نوعی به قول شما فیلد file رو دور زد.
البته اینکار مطمئناً ده ها خط کد نویسی نیاز داره.
موفق باشید.
NabiKAZ
24 شهريور 1386, 00:57
اگر فایل شما حاوی متن معمولی باشه و برنامه یا چیز دیگه ای نباشه و تمام کاربران شما از اینترنت اکسپلورر استفاده کنند
بله میشه همچین کاری کرد
البته فکر کنم اینترنت اکسپلورر این جور دستورات رو به عنوان دستورات پر خطر یا بلوک کنه یا به کاربر هشدار بده
تسلیم :-?
اگه برای ویروس نویسی یا تروجان نویسی باشه بد نیست چون ممکنه از هر 2 نفر برای یکیشون بدون مشکل کار کنه
ولی نمی شه اینو به عنوان یه کار مطمئن به مشتری داد
اصلاً بحث من صحبت در مورد مزایا و معایب و کلاً بررسی و آنالیز این روش نبود.
شما و برخی دوستان روی بحث امنیت ، در مورد مقدار دهی اولیه فیلد از نوع file اصرار داشتید. و من هم سعی کردم متقاعدتون کنم که این مسئله به بحث امنیت مربوط نمیشه و همون کاری که با فیلد فایل میشه انجام داد، در مورد فیلد text هم میشه انجام داد و به عبارتی سطح امنیتی در هر صورت یکسانه.
که ظاهراً متقاعد هم شدید.
تشکر
نبی
NabiKAZ
24 شهريور 1386, 01:12
یه نکته ای بد نیست یادآور بشم و اونم اینکه بعضی از دوستان اشاره به این داشتند که مثلا میشه یه فیلد رو مقدار اولیه بدیم و فرم رو سابمیت کنیم و فایلی رو روی سرور آپ لود کنیم...
در این مورد باید عرض کنم که حتی در صورتی که نشه به فیلد file مقدار اولیه داد. راه هایی برای ارسال فایل به url وجود داره که خیلی ساده تر هستند. مثلا استفاده از CURL که همونطور که سایر داده ها رو میشه به یه url پست کرد، همچنین میشه مستقیماً یه فایل رو به یه url پست کرد!
اما این درصورتیه که بخوایم یه فرم رو به صورت غیر مجاز سابمیت کنیم که همراهش فایل رو هم ارسال کنیم و موارد خاص دیگه ای که خیلی کاربردی نیستند.
اما مثلا در نظر بگیرید کاربر یه فرم داره که نام و سایر اطلاعات رو وارد میکنه و عکسش هم از روی هارد انتخاب میکنه ، حالا وقتی فرم سابمیت میشه و در سرور چک میشه معلوم میشه که مثلا نام صحیح وارد نشه پس فرم باید مجدد نمایش داده بشه، در این لحظه مقدار "نام" که اشتباه بوده به همون شکل به text نسبت داده میشه و کاربر میتونه تصحیحش کنه. اما فید file مقدار خود رو از دست میده ! این شاید یکی از موارد کاربردی قضیه باشه. البته این اتفاق برای فید password هم میافته و اون هم مقدار خودش رو از دست میده که شاید اینطوری بهتر هم باشه ولی در مورد فید file دلیلی پیدا نمیکنم ......
نبی
mohseni12345
24 شهريور 1386, 02:16
در این مورد باید عرض کنم که حتی در صورتی که نشه به فیلد file مقدار اولیه داد. راه هایی برای ارسال فایل به url وجود داره که خیلی ساده تر هستند. مثلا استفاده از CURL که همونطور که سایر داده ها رو میشه به یه url پست کرد، همچنین میشه مستقیماً یه فایل رو به یه url پست کرد!
اما این درصورتیه که بخوایم یه فرم رو به صورت غیر مجاز سابمیت کنیم که همراهش فایل رو هم ارسال کنیم و موارد خاص دیگه ای که خیلی کاربردی نیستند.
من با cURL کار نکدم و نمی دونم ایا این امکان رو داره یا نه
اما مثلا در نظر بگیرید کاربر یه فرم داره که نام و سایر اطلاعات رو وارد میکنه و عکسش هم از روی هارد انتخاب میکنه ، حالا وقتی فرم سابمیت میشه و در سرور چک میشه معلوم میشه که مثلا نام صحیح وارد نشه پس فرم باید مجدد نمایش داده بشه، در این لحظه مقدار "نام" که اشتباه بوده به همون شکل به text نسبت داده میشه و کاربر میتونه تصحیحش کنه. اما فید file مقدار خود رو از دست میده ! این شاید یکی از موارد کاربردی قضیه باشه. البته این اتفاق برای فید password هم میافته و اون هم مقدار خودش رو از دست میده که شاید اینطوری بهتر هم باشه ولی در مورد فید file دلیلی پیدا نمیکنم ......
معمولا در اینجور مواقع از جاوا اسکریپت کمک می گیرند
یا اژاکس
bahy_my
24 شهريور 1386, 08:42
vbscript آره خوب.
اصلاً خودمون یه اینپوت فایل درست کنیم.
توی vb خوب میشه dialog باز کرد.
اگه با جاوااسکریپت هم بشه که ساپورتش بیشتره فکر کنم بشه یه اینپوت فایل مجازی درست کرد که از اون استفاده شه.
نظرتون چیه ؟
NabiKAZ
24 شهريور 1386, 09:36
من که نفهمیدم، اینپورت فایل و ... چیه...
bahy_my
24 شهريور 1386, 11:05
خیلی ممنون ! :|
<input="file"....>
می گم اگه بشه با js یه دیالوگ باز کرد میشه یه input="file" خودمون درست کنیم و میشه همون کدی رو که دادم روش عملی کرد.
ینی کدی که همتون بلدین.
mohseni12345
24 شهريور 1386, 14:26
کسی می دونه چجوری میشه با اژاکس فایل اپلود کرد؟
فکر کنم اگه اینو متوجه شدید جواب سوالتون هم پیدا بشه
bahy_my
24 شهريور 1386, 15:22
جواب بهتر از این نمیشه داد !
بیاید بگردیم. پیدا کنیم. و تو همین تاپیک بگیم.
my friend
26 شهريور 1386, 14:02
یه روش هست که با iframe فایل رو آپلود میکنه... (http://www.webtoolkit.info/ajax-file-upload.html)
برای اینکه اطلاعات فرم نپره این روش بهترین راهه به نظرم...
در مورد مقدار دهی به file... این یه مشکل امنیتی محسوب میشه.... چون مثلا موقع نمایش یه فرم میتونیم یه مقدار به file بدیم و اونو تو یه لایه نامرئی بزاریم... بعد بدون اینکه کاربر متوجه بشه فایلی رو آپلود میکنه... 99.99999% احتمال میدم که این کار ( نسبت دادن مقدار به file ) غیر ممکن هست... ( اونایی که html رو پایه ریزی کردن فکر اینچیزا رو هم کردن:D )
mazoolagh
28 شهريور 1386, 21:05
تا زمانی که متوجه نباشن چرا امکان مقدار اولیه دادن به فیلد فایل از نظر امنیتی مسئله ساز هست ، غیرممکن بودن اون رو هم قبول ندارن!
وی بولتین نسخه 3.8.4, تمام حقوق محفوظ می باشد ©
2000-2006, نرم افزار تجاری شرکت Jelsoft