PDA

View Full Version : سوال: چگونگی جلوگیری از حملات xss در جاوا



pro_mvb
شنبه 08 اسفند 1388, 14:52 عصر
سلام
من اول کلی سرچ کردم اما در مورد جلوگیری این نوع حملات در جوا چیزی در سایت پیدا نکردم!
راستش من قبلا در یک تاپیک دیگه یه سوال داشتم که میخواستم بدونم چطوری میشه یک مقدار رو از db سلکت دزد به طوری که به صورت لینک باشه و یه مقدار رو(مثل id) ببره به صفحه بعدی.
دوستان کلی راهنمایی کردن . دم همشون گرم :قلب: اما بعد از گذشتن خرم از پل گفتم بذار در url یه تست باگ xss بگیرم :شیطان:
متاسفانه باگ داشت:قهقهه: در گوگل هم سرچ کردم اما درتس متوجه نشدم چطوری میتونم جلوی این حملرو در جاوا بگیرم کد من اینه:

<%@ page contentType="text/html;charset=windows-1252"%>
<%@page import="java.util.*" %>
<%@page import="java.sql.*" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>home</title>
</head>
<body>
<%
String url;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = java.sql.DriverManager.getConnection("jdbc:odbc:myodbc","SYSTEM","MANAGER");

Statement statement = con.createStatement();

ResultSet rs= statement.executeQuery("select name from mytable");
while(rs.next())
{

String a= rs.getString("name");
url ="propertis.jsp?name="+a;

%>

<br/> <a href="<%= url %>">Code</a>
<%
}

statement.close();
con.close();
%>


</body>
</html>
وقتی رانش میکنم در url صفحه دوم (همونی که بهش لینک شده) متغیر name مقدار هر چیزی رو میگیره و نمایش میده . و وقتی یک اسکریپت سادرو هم ران کنم اونو ران میکنه مثل این:

<scritp> alret('salam mr')</script>
من چطوری جلوی این کارو بگیرم؟؟؟؟؟؟؟؟

pro_mvb
شنبه 08 اسفند 1388, 17:31 عصر
دوستان راهنمایی کنین دیگه!:ناراحت:
اینطور که من چند جا دیدم ظاهرا نباید از ای عبارت استفاده کنم:

<%=
که من برای مقدار دادن به لینکم ازش استفاده کردم:

<a href="<%= url %>">Code</a>
البته توو خود کد نگاه کنید بهتر متوجه میشید.
اگه راه دیگه ای هست هلپ کنین یا بگین چطوری از همین استفاده کنم طوری که باگ xss نداشته باشه:بوس:

pro_mvb
یک شنبه 09 اسفند 1388, 10:37 صبح
چرا کسی جواب نمیده؟:ناراحت:
من حتی با
out.print("<a href='"+url+"'>code</a>
امحان کردم ، کار میده اما بازم باگ xss داره!:گریه: راهنمایی کنین دیگه :افسرده:

pro_mvb
دوشنبه 10 اسفند 1388, 15:33 عصر
کسی به سایت رسیدگی میکنه؟:اشتباه:

0x21HATE
دوشنبه 10 اسفند 1388, 21:47 عصر
شما باید ورودی ها رو چک کنید و کاراکتر های غیر مجاز رو فیلتر کنید

pro_mvb
دوشنبه 10 اسفند 1388, 22:04 عصر
خودم اوکیش کردم . اما با این حال بی معرفت نیستم:لبخند:
دمت گرم
یک راه حل ساده برای فقط مقادیر عدید مثل Int پیدا کردم اونم اینه:
کافیه مقداری که دز صفحه دوgetParameter میکنین رو بعدش به این صورت پیش برین:

String get= request.getParameter("ID");
int r=Integer.parseInt(get);
البته گفتم که این فقط برای اعدا جواب میده! برای String ها هنوز چیزی پیدا نکردم(البته با یه کد jdbc و چک کردن مقداری که در url هست با مقداری که در db هست میشه این کارو کرد . اما موقعی که میخوام 2 تا مقدار رو یعنی مقداری که از url گرفته شده و مقداری که در db هست رو با if چک کنم گیر میده . ظاهرا به خاطر هم جنس نبودنشون هست ( با اینکه هردو String هستن)
اگه اینم اوکی بشه دیگه رلست:تشویق::قهقهه:

parsajax
پنج شنبه 23 اردیبهشت 1389, 10:42 صبح
ببین من برنامه نویس جاوا نیستم ( php کار میکنم) ولی این مشکل برای همه برنامه نویس های وب هست. راه حلی که من پیشنهاد میکنم اینه که یه فانکشن طراحی کنی که یه متغیر ورودی بگیره و از این بابت چکش کنه و مقدار رو برگردونه. بعد شما اول متغیر هایی که از گت یا پست میگیری رو بفرست به این تابع و نتیجه رو استفاده کن. من تابعی که برای این کار استفاده میکنم و اینجا میزارم خودت تو جاوا شبیه سازیش کن.




function __jClr($str)
{

$array_disWords = array(
'/\<script[^\>]*?\>.*?\<\/script\>/si',
'/script/si',
'/hex/si',
'/eval/si',
'/\.location/si',
'/\.cookie/si',
'/\.src/si',
'/refresh/si',
'/alert/si'
);

$array_rpcWords = array(
'',
'<span class="red">script</span>',
'<span class="red">hex</span>',
'<span class="red">eval</span>',
'<span class="red">.location</span>',
'<span class="red">.cookie</span>',
'<span class="red">.src</span>',
'<span class="red">refresh</span>',
'<span class="red">alert</span>'
);

$str = preg_replace($array_disWords, $array_rpcWords, $str);
return $str;

}