Proteksi Web di ASP.NET

20 Juli, 2007 at 3:03 am | In MS.NET | Leave a Comment

Membahas masalah security tentu tidak habis-habisnya. Seperti anda tahu bahwa dalam sebulan segala macam security hole dapat terungkap.
Namun pada artikel ini saya akan membahas dari sisi ASP.NET, khususnya yang ada di web Jasakom ini.
Bagi anda yang suka me-”ngetest” web Jasakom, mungkin sudah sering melihat tampilan di bawah ini:

Bagi yang belum pernah melihatnya page diatas mungkin suatu hari akan menemukan nya tanpa melakukan testing script, maka perlu diketahui itu adalah error yang belum di ketahui oleh kami, dan perlu di beritahukan ke webmaster agar dapat kami perbaiki.

Memang tidak mudah membuat suatu web yang aman dari serangan para hacker tsb.
Namun ada beberapa tips yang akan saya bagikan di sini. Dalam ASP.NET segala error yang di query dapat kita trap dan di redirect ke error page. Jadi tidak seperti yang terjadi pada ASP klasik dimana anda mencoba memberikan parameter pada URL dan anda mengharapkan ditampilkannya direktory, nama table ataupun informasi berharga lainnya pada error message dan kemudian anda melanjutkan misi berikut dengan SQL Injection.

Error trapping ini ada di file web.config seperti code di bawah ini:

<customErrors mode=”On” defaultRedirect=”error.aspx”/>

Tetapi jika anda tidak ingin redirect error atau membiarkan error tsb di tampilkan di webpage maka dapat menggunakan code seperti di bawah ini:

<customErrors mode=”Off” /> Memang fungsi ini sangat berharga khususnya untuk Jasakom, karena dalam sehari “pengetes”-an itu sangat banyak dilakukan.
Ada satu hal lagi yang perlu di ingat, pada saat develop web ini, saya menggunakan Try Catch untuk menampilkan error sehingga lebih mudah untuk di debug karena akan ditampilkan error message-nya.
Namun anda harus hapus Try Catch tsb karena dengan adanya ini maka ia tidak akan di redirect ke error page.

Mengisi Data Tabel ke DropDownList – ASP.NET

20 Juli, 2007 at 3:01 am | In MS.NET | Leave a Comment

Dalam pemrograman aplikasi desktop ataupun web tentunya kita tidak terlepas untuk menggunakan dropdownlist.Berikut ini saya akan membagikan cara bagaimana membuat fungsi isi data dari tabel ke DropDownList. Jadi apabila form ASP.NET anda menggunakan category, maka tentunya anda dapat menggunakan fungsi ini.

Pada contoh ini saya menggunakan tabel dengan nama tbCategory yang dibuat dengan MS Access 2000.
Field yang digunakan adalah
CategoryId (autonumber)
CategoryName (string 20)
CatOrder (string 2)

Langkah pertama, kitaakan tempatkan connection string di file web.config. Hal ini untuk memudahkan agar kita perlu membuat connection string berulang-ulang di dalam coding kita yang banyak berhubungan dengan proses database.

File web.config

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <appSettings>
    <add key="cn" value="Provider=Microsoft.Jet.OLEDB.4.0;data source=[driveanda]:\[namafile].mdb"/>
  </appSettings>
</configuration>

Langkah kedua adalah membuat file ASPX.
File Fillddlcs.aspx

<%@ Page Language="vb" src="Fillddlvb.aspx.cs" Inherits="dotnet.FillDropDownList" AutoEventWireup="true" %>
<HTML>
<HEAD>
</HEAD>

<form runat="server" method="post">
<table>
	<tr>
		<td>
			<font size="2">Category :</font>
		</td>
	<td>
		<asp:dropdownlist id="ddlCategory"
		DataValueField="CategoryId"
		DataTextField="CategoryName"
		Width="150"
		runat="server"/>
	</td>
	</tr>
</table> 

</form>
</body>
</HTML>

Penjelasan program pada file aspx:
DataValueFiled adalah field yang nilainya akan disimpan ke tabel.
DataTextField adalah field yang nilainya akan ditampilkan.

File Coding Program fillddlcs.aspx.cs

// C# Coding
using System;
using System.Data;
using System.Data.OleDb;
using System.Web.UI.WebControls;
using System.Configuration;

namespace dotnet
{
  public class FillDdlCs : System.Web.UI.Page
  {
	  protected DropDownList ddlCategory;

  public void Page_Load(Object sender, EventArgs e)
  {
	  GetValues("tbCategory","CatOrder");
  }

  public bool GetValues(string tableName, string RowOrder)
  {
	  OleDbConnection myConnection = new OleDbConnection(ConfigurationSettings.AppSettings["cn"]);
	  myConnection.Open();
	  string stSql = "Select * from " + tableName + " ORDER BY " + RowOrder;
	  OleDbCommand myCommand = new OleDbCommand(stSql, myConnection);
  	  OleDbDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
	  ddlCategory.DataSource = myReader;
	  ddlCategory.DataBind();
	  return true;
	  myReader.Close();
  }
 }
}

Penjelasan program file fillddlcs.aspx.cs:

Call fungsi GetValues pada saat loading page, sehingga DropDownList dapat di isi dengan tabel Category.
Parameter menggunakan nama tabel dan field CatOrder agar urutannya sesuai dengan yang sudah ada di field ini.

Source code C#
Source code VB.NET

Mengubah Password User di Windows

20 Juli, 2007 at 2:58 am | In MS.NET | Leave a Comment

Jika anda berpikir untuk membuat modul mengganti password windows secara remote, maka ini adalah function yang anda perlukan. Di artikel ini disharing source code function yang bekerja dengan API dari windows untuk mengganati password user.

To the point, untuk para teman-teman yang ada di Jasakom saya ingin membagikan sedikit tips bagaimana mengganti password dari user-user yang ada di Windows. Adapun tools ini dibuat dari Visual Basic 6 Dimana Tools ini dapat mengganti password dari Administrator,guest,etc secara remote atau
beda komputer Dengan tools ini maka kita bisa mengakses komputer orang lain setelah password admin nya kita ganti…smoga ilmu ini tidak
disalah gunakan

Tools ini bekerja dengan memakai komponen yang telah disediakan oleh windows yaitu “Netapi32.dll”,
Berikut ini saya serta kan source dari tools ini:

--------------------------------------------------------------------------------------------

  'Copyright by x-vb@jhie
  'http://www.vbbego.cjb.net
  'Penulis: x-vb@jhie - 7/21/2004

  Option Explicit
  Private Declare Function NetUserChangePassword Lib "Netapi32.dll" _
  (Domain As Any, User As Any, OldPass As Byte, NewPass As Byte) As Long

  Private Sub Command1_Click()
  Dim H As Long
  Dim bServer() As Byte, bUsername() As Byte
  Dim bold() As Byte, bNew() As Byte 

  ' Masukan nama computer yg akan diganti passwordnya
  bServer = "\\192.168.0.1" & vbNullChar 

  'Nama user yg akan diganti passwornya
  bUsername = "Administrator" & vbNullChar 'Password lama bold = "123" & _
  vbNullChar 'Password Baru bNew = "root" & _
  vbNullChar H = NetUserChangePassword(bServer(0), bUsername(0), bold(0), bNew(0))
  If H = 0 Then
     MsgBox "Password telah diganti dengan yang baru",64
  Else
     MsgBox "penggantian password gagal",16
  End If 

  End Sub

--------------------------------------------------------------------------------------------

Tips Paging Datagrid

20 Juli, 2007 at 2:35 am | In MS.NET | Leave a Comment

Di tulisan ini saya akan memberikan tips megenai penulisan paging pada datagrid. Dari semua contoh custom paging di internet yang pernah saya baca agaknya memiliki cara yang cukup komplex, dan juga agak berbelit-belit karena menggunakan temporary file ataupun dengan segala macam web control temporary yang di hidden di halaman aspx.

Langkah yang perlu dilakukan adalah membuat navigasi di halaman aspx. Pada bagian ini saya menggunakan imagebutton control sehingga tampilannya lebih menarik di bandingkan dengan menggunakan text (label control).
Ke 4 web control di bawah ini akan memanggil method yang sama yaitu Navigate. Yang berbeda di sini hanya CommandName -nya saja.

<asp:imageButton ID="lnkFirst1" Runat="server" ImageUrl="images/first.gif"
tooltip="First Page" CommandName="First" OnCommand="Navigate"/>

<asp:imageButton ID="lnkPrev1" Runat="server" ImageUrl="images/previous.gif"
Tooltip="Previous" CommandName="Prev" OnCommand="Navigate"/>&nbsp;&nbsp;

<asp:imageButton ID="lnkNext1" Runat="server" ImageUrl="images/next.gif"
ToolTip="Next" CommandName="Next" OnCommand="Navigate"/>

<asp:imageButton ID="lnkLast1" Runat="server" ImageUrl="images/last.gif"
ToolTip="Last Page" CommandName="Last" OnCommand="Navigate"/>

Pada bagian datagrid control tetap menggunakan attribute AllowPaging=”True”, tetapi PagerStyle-Visible=”False”.
Disini memang agak menarik karena saya tidak menggunakan custom paging, tetapi hasil yang akan kita gunakan di
sini sama dengan custom paging.

<ASP:DataGrid id="MyDataGrid" runat="server" width="100%" AlternatingItemStyle-BackColor="#fbdddd"
 erdana" CellSpacing="0" CellPadding="3" GridLines="Both"
 PagerStyle-Visible="False"
 PageSize="10" OnItemCreated="OnItemCreatedEventHandler" AllowPaging="True" AutoGenerateColumns="false">
</ASP:DataGrid>

Setelah selesai coding pada bagian file aspx, maka sekarang kita akan membuat coding pada code-behind.
Langkah pertama adalah menghitung jumlah halaman yang ada dengan contoh code seperti di bawah ini. Untuk perhitungan jumlah
halaman ini saya menggunakan myDatagrid.Pagesize yang telah ditentukan di datagrid control. Code di bawah ini dapat di tambahkan
pada bagian akhir dari method BindGrid() anda.

'--------------------------------Calculate the pages-------------------------------------------------
        myConnection.Open()
        Dim myCommand = New OleDbCommand(stSql, myConnection)
        Dim myReader As OleDbDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)
        Dim TotalRec As Int32
        If myReader.HasRows Then
            While myReader.Read
                TotalRec = TotalRec + 1
            End While
        End If
        myReader.Close()
        Dim TotalPage As Int16 = Math.Round(TotalRec / MyDataGrid.PageSize, 1)
        lblTotalPage.Text = Convert.ToString(Convert.ToUInt16(TotalPage))

        '--------------------------inisialisasi tampilan button navigasi
        If MyDataGrid.CurrentPageIndex = 0 Then
            lnkFirst1.Enabled = False
            lnkFirst1.ImageUrl = "images/first_dis.gif"
            lnkPrev1.Enabled = False
            lnkPrev1.ImageUrl = "images/previous_dis.gif"
            lnkLast1.Enabled = True
            lnkLast1.ImageUrl = "images/last.gif"
            lnkNext1.Enabled = True
            lnkNext1.ImageUrl = "images/next.gif"
        End If

        '------------------------------------------------------------------

Selanjutnya yang perlu ditambahkan untuk mendukung paging ini adalah method Navigate.
Perhatikan code di bawah ini, saya menggunakan Mydatagrid.CurrentPageIndex untuk mengetahui posisi halaman kita berada.
Untuk SELECT CASE tersebut kita menggunakan CommandName yang telah ditentukan pada datagrid control di halaman ASPX.
Image yang digunakan di sini ada 2 untuk setiap tombol navigasi, saya akan ambil tombol first sebagai contoh.
Image first.gif adalah dengan warna yang lebih terang, dengan maksud menandakan tombol aktif dan dapat di klik, sedangkan first_dis.gif adalah image yang tombol tidak aktif dan menggunakan warna abu-abu.

    Public Sub Navigate(ByVal sender As Object, ByVal e As CommandEventArgs)
        Select Case e.CommandName
            Case "First"
                MyDataGrid.CurrentPageIndex = 0
                lnkFirst1.Enabled = False
                lnkFirst1.ImageUrl = "images/first_dis.gif"
                lnkPrev1.Enabled = False
                lnkPrev1.ImageUrl = "images/previous_dis.gif"

                lnkLast1.Enabled = True
                lnkLast1.ImageUrl = "images/last.gif"
                lnkNext1.Enabled = True
                lnkNext1.ImageUrl = "images/next.gif"

            Case "Next"
                MyDataGrid.CurrentPageIndex = MyDataGrid.CurrentPageIndex + 1
                If MyDataGrid.CurrentPageIndex = CInt(lblTotalPage.Text) - 1 Then
                    lnkLast1.Enabled = False
                    lnkLast1.ImageUrl = "images/last_dis.gif"
                    lnkNext1.Enabled = False
                    lnkNext1.ImageUrl = "images/next_dis.gif"

                End If
                lnkFirst1.Enabled = True
                lnkFirst1.ImageUrl = "images/first.gif"
                lnkPrev1.Enabled = True
                lnkPrev1.ImageUrl = "images/previous.gif"

            Case "Prev"
                MyDataGrid.CurrentPageIndex = MyDataGrid.CurrentPageIndex - 1
                If MyDataGrid.CurrentPageIndex = 0 Then
                    lnkFirst1.Enabled = False
                    lnkFirst1.ImageUrl = "images/first_dis.gif"
                    lnkPrev1.Enabled = False
                    lnkPrev1.ImageUrl = "images/previous_dis.gif"

                End If
                lnkLast1.Enabled = True
                lnkLast1.ImageUrl = "images/last.gif"
                lnkNext1.Enabled = True
                lnkNext1.ImageUrl = "images/next.gif"

            Case "Last"
                MyDataGrid.CurrentPageIndex = CInt(lblTotalPage.Text) - 1
                'Top navigation
                lnkLast1.Enabled = False
                lnkLast1.ImageUrl = "images/last_dis.gif"
                lnkNext1.Enabled = False
                lnkNext1.ImageUrl = "images/next_dis.gif"

                lnkFirst1.Enabled = True
                lnkFirst1.ImageUrl = "images/first.gif"
                lnkPrev1.Enabled = True
                lnkPrev1.ImageUrl = "images/previous.gif"

        End Select
        BindGrid()
    End Sub

Dari contoh di atas dapat kita lihat bahwa tidak perlu menuliskan code yang panjang dan bertele-tele seperti membuat temporary file dan contorol-control lainnya yang membuat langkah coding lebih panjang.

Blog pada WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.