2016-03-24 14 views
-2

yayınlandı Yeni bir kodlayıcı javascript hacks bir raylar proje çapraz site komut dosyası kullanarak inceleyen bir web eğitimi öğretici yapıyor.Siteler arası komut dosyası kullanarak javascript hacks - kod enjeksiyon nerede

Projemde, account_settings.html.erb'deki user_first_name giriş alanına bir parça kötü amaçlı javascript enjekte ettik. Bu da, yenilendiğinizde veya yeni bir sayfayı ziyaret ettiğinizde saldırıya uğramış olduğunuzu söylemek için bir diyalog kutusu oluşturur. sayfa. (Bkz. Ekran görüntüleri)

Sorun: öğretim görevlisi bu sahtekarlık kodunu nasıl temizleyeceğimizi açıklamaksızın bitirdi ve rahatsız edici diyalog kutusunun görüntüsünü alamıyorum.

Görünüm sayfası kaynağında XSS kodunu görebiliyorum, ancak projemde bu görünümde bunu bulmakta zorlanıyorum ya da submime T işlevini kullanarak kaynak oluşturamıyorum.

Sadece bu XSS kodu enjeksiyonunun nerede bulunduğumla ilgili olarak yönlendirilebileceği veya gönderilebileceği şekilde gönderildiği güvenlik önerisi arıyorum.

enter image description here enter image description here

new.html.erb

<div class="row-fluid"> 
    <div class="span12"> 

     <div class="row-fluid"> 
      <div class="span4 offset4"> 
      <div class="signup"> 
     <%= form_for @user, :html => {:id => "account_edit", :class=> "signup-wrapper"} do |f| %> 

      <div class="header"> 
        <h2>Sign Up</h2> 
        <p>Fill out the form below to login</p> 
        </div> 

      <div class="content"> 
       <%= f.text_field :email, {:class => "input input-block-level", :placeholder => "Email"} %> 

       <%= f.text_field :first_name, {:class => "input input-block-level", :placeholder => "First Name"} %> 

       <%= f.text_field :last_name, {:class => "input input-block-level", :placeholder => "Last Name"} %> 

        <div class="control-group"> 
        <%= f.password_field :password, {:class => "input input-block-level", :placeholder => "Password"}%> 
       </div> 
       <div class="control-group"> 
        <%= f.password_field :password_confirmation, {:class => "input input-block-level", :placeholder => "Confirm Password"}%> 
       </div> 
      </div> 

      <div class="actions"> 
      <%= f.submit "Submit", {:id => 'submit_button', :class => "btn btn-info btn-large pull-right"} %> 
      </div> 
      <div class="clearfix"></div> 
     <% end %> 

      </div> 
      </div> 
     </div> 

    </div> 
</div> 

account_settings.html.erb

<div class="dashboard-wrapper"> 
    <div class="main-container"> 
    <div class="row-fluid"> 
     <div class="span12"> 
     <div id="success" style="display: none;" class="alert alert-block alert-success fade in"> 
       <h4 class="alert-heading"> 
        Success! 
       </h4> 
       <p> 
        Information successfully updated. 
       </p> 
       </div> 
     </div> 
    </div> 
    <div class="row-fluid"> 
     <div class="span12"> 
     <div id="failure" style="display: none;" class="alert alert-block alert-error fade in"> 
        <h4 class="alert-heading"> 
         Error! 
        </h4> 
        <p> 
         Failed to update. 
        </p> 
        </div> 
     </div> 
    </div> 
    <div class="row-fluid"> 
     <div class="span6"> 
      <div class="widget"> 
      <div class="widget-header"> 
       <div class="title"> 
       <span class="fs1" aria-hidden="true" data-icon="&#xe090;"></span> Profile Settings 
       <span class="mini-title"> 
        Edit your account details 
       </span> 
       </div> 
      </div> 
      <div class="widget-body"> 
      <%= form_for @user, :html => {:id => "account_edit"} do |f|%> 
       <%= f.hidden_field :user_id%> 
      <div class="control-group"> 
        <%= f.label :email, nil, {:class => "control-label"}%> 
      <%= f.text_field :email, {:class => "span12"}%> 
      </div> 

      <div class="control-group"> 
      <%= f.label :first_name, nil, {:class => "control-label"}%> 
      <%= f.text_field :first_name, {:class => "span12"} %> 
      </div> 

      <div> 
      <%= f.label :last_name, nil, {:class => "control-label"}%> 
      <%= f.text_field :last_name, {:class => "span12"} %> 
      </div> 

      <div class="control-group"> 
      <%= f.label :password, nil, {:class => "control-label"}%> 
      <%= f.password_field :password, {:class => "span12", :placeholder => "Enter Password"}%> 
      </div> 

      <div class="control-group"> 
       <%= f.label :password_confirmation, nil, {:class => "control-label"}%> 
       <%= f.password_field :password_confirmation, {:class => "span12", :placeholder => "Enter Password"} %> 
      </div> 

      <div class="form-actions no-margin"> 
      <%= f.submit "Submit", {:id => 'submit_button', :class => "btn btn-info pull-right"} %> 
      </div> 

      <div class="clearfix"> 
       </div> 
      <% end %> 

     </div> 
    </div> 
    </div> 
</div> 

<%= javascript_include_tag ('validation.js')%> 

<script type="text/javascript"> 

$("#submit_button").click(function(event) { 
    var valuesToSubmit = $("#account_edit").serialize(); 
    event.preventDefault(); 
    $.ajax({ 
     url: <%= "https://stackoverflow.com/users/#{current_user.user_id}.json".inspect.html_safe %>, 
    data: valuesToSubmit, 
    type: "POST", 
    success: function(response) { 
    if (response.msg == "failure") { 
     $('#failure').show(500).delay(1500).fadeOut(); 
    } else { 
     $('#success').show(500).delay(1500).fadeOut(); 
    } 
    }, 
    error: function(event) { 
    $('#failure').show(500).delay(1500).fadeOut(); 
    } 
    }); 
}); 

</script> 

_header.html.erb

<header> 
    <span style="color:#eee;margin-left:10px;"> 
    Font Size: 
    <a href="<%= home_dashboard_index_path %>?font=8pt" style="font-size:10pt;color:#eee;">A</a> 
    <a href="<%= home_dashboard_index_path %>?font=200%25" style="font-size:18pt;color:#eee;">A</a> 
    </span> 
    <div class="user-profile"> 
     <a data-toggle="dropdown" class="dropdown-toggle"> 
     <img src=" <%= image_path('profile_color.jpg')%>" alt="profile"> 

     </a> 
     <span class="caret"></span> 
     <ul class="dropdown-menu pull-right"> 
     <li> 
     <%= link_to "account settings", user_account_settings_path(:user_id => current_user.user_id) %> 
     </li> 
     <li> 
      <%= link_to "logout", logout_path %> 
     </li> 
     </ul> 
    </div> 
    <ul class="mini-nav"> 
    <li style="color: #FFFFFF"> 
    <!-- 
    I'm going to use HTML safe because we had some weird stuff 
    going on with funny chars and jquery, plus it says safe so I'm guessing 
    nothing bad will happen 
    --> 
    Welcome, <%= current_user.first_name.html_safe %> 

    </li> 
    </ul> 
</header> 
+0

'<% = current_user.first_name.html_safe%>' neden burada 'html_safe' yöntemine ihtiyacınız var? Bu yöntemi kaldırırsanız, xss mümkün değildir. –

+0

Onlara buna ihtiyacım yok ve bunun çok verimli olduğunu anladım, öğretim görevlisi başlangıçta, şu an projemin nerede olduğunu bulmaya çalıştığımı söyledi –

+0

şimdi nerede projemde yer alıyor - Burada <% = current_user.first_name.html_safe%> ' –

cevap

1

kaydettiğiniz Eğer çalıştırmak tırmık db: reset (BU DB VE SİL TÜM GİRİYOR RESET OLACAK) veya Eğer girişleri komutuna gitmek kaydetmek istiyorsanız senin raylar proje ve türü satır x = database_name.find_by (id_of_entery) ' 'x.destroy' burada

serin raylar konsol rehberdir 'c raylar' https://pragmaticstudio.com/blog/2014/3/11/console-shortcuts-tips-tricks

+0

Anlayışınız için çok teşekkür ederim. ne soruyor ve tutarlı bir cevap veriyordum. –

İlgili konular