Thứ Ba, 10 tháng 1, 2012

GridView All Rows in Edit Mode

Introduction:
http://highoncoding.com/Articles/219_GridView_All_Rows_in_Edit_Mode.aspx
http://aspadvice.com/blogs/azamsharp/archive/2006/12/18/GridView-Update-All-Rows-At-Once.aspx

GridView provides a very easy way to edit the data by using the in-place editing feature. Although the feature is great but sometimes we want to view the complete GridView in the edit mode and quickly edit multiple records without having to click the edit button on each row. In this article I will demonstrate how to convert the whole GridView in edit mode with a click of a button.

Database Design:

In this article I will be using a custom database called School which consists of a single table called “Users”. The Users table contains only three columns namely FirstName, LastName and UserID.

Displaying Data in the GridView Control:

The first task is to display the data in the GridView control. Take a look at the method below which is used to populate the GridView control.

private void BindData()

{

string connectionString = "Server=localhost;Database=School;Trusted_Connection=true";

SqlConnection myConnection = new SqlConnection(connectionString);

SqlDataAdapter ad = new SqlDataAdapter("SELECT UserID, FirstName, LastName FROM Users", myConnection);

DataSet ds = new DataSet();

ad.Fill(ds);
gvUsers.DataSource = ds;
gvUsers.DataBind();

}

Depending on the data in the database your GridView will be populated.

GridView HTML Code:

The HTML code of the GridView is where all the magic happens. Let’s first take a look at the code.












































Now, check out the section where all the TemplateFields exists. The section contains the Label as well as the TextBox. The visibility of the Label and the TextBox depends on the IsInEditMode property which, is a public property defined in the code behind. You can think of it as a switch meaning that when the Labels are displayed then the TextBoxes are not displayed and when the TextBoxes are displayed then the Labels will not be displayed.

IsInEditMode Property:

This is a simple property that returns the Boolean value of true or false.

private bool isEditMode = false;

protected bool IsInEditMode

{

get { return this.isEditMode; }

set { this.isEditMode = value; }

}


I have used a simple ASP.NET Button control to change the GridView to edit mode. Check out the code below:



// This method will put the GridView in the edit mode

protected void Button1_Click(object sender, EventArgs e)

{

isEditMode = true;

BindData();

}


Yup! That is all you need to change the GridView to edit mode. The isEditMode variable is set to true and it will make TextBoxes visible and the Labels invisible.


SQL Injection

A SQL injection is often used to attack the security of a website by inputting SQL statements in a web form to get a badly designed website to perform operations on the database (often to dump the database content to the attacker) other than the usual operations as intended by the designer. SQL injection is a code injection technique that exploits a security vulnerability in a website's software. The vulnerability happens when user input is either incorrectly filtered for string literal escape characters embedded in SQL statements or user input is not strongly typed and unexpectedly executed. SQL commands are thus injected from the web form into the database of an application (like queries) to change the database content or dump the database information like credit card or passwords to the attacker. SQL injection is mostly known as an attack vector for websites but can be used to attack any type of SQL database.
Using well designed query language interpreters can prevent SQL injections. In the wild, it has been noted that applications experience, on average, 71 attempts an hour.[1] When under direct attack, some applications occasionally came under aggressive attacks and at their peak, were attacked 800-1300 times per hour.[1]

SQL Injection Attack (SQLIA) is considered one of the top 10 web application vulnerabilities of 2007 and 2010 by the Open Web Application Security Project.[2] The attacking vector contains five main sub-classes depending on the technical aspects of the attack's deployment:[citation needed]
Classic SQLIA
Inference SQL Injection
Intracting with SQL Injection
DBMS specific SQLIA
Compounded SQLIA
Some security researchers propose that Classic SQLIA is outdated[3] though many web applications are not hardened against them. Inference SQLIA is still a threat, because of its dynamic and flexible deployment as an attacking scenario. The DBMS specific SQLIA should be considered as supportive regardless of the utilization of Classic or Inference SQLIA. Compounded SQLIA is a new term derived from research on SQL Injection Attacking Vector in combination with other different web application attacks as:
SQL Injection + Insufficient authentication[4]
SQL Injection + DDos attacks[5]
SQL Injection + DNS Hijacking[6]
SQL Injection + XSS[7]
The Storm Worm is one representation of Compounded SQLIA.[8] A complete overview of the SQL Injection classification is presented in the next figure, Krassen Deltchev in 2010:


A Classification of SQL Injection Attacking Vector, till 2010.
This Classification represents the state of SQLIA, respecting its evolution till 2010; further refinement is underway.[9] m/2007/01/social-engineering-and-malware.html |title=Dancho Danchev's Blog
[edit]Technical Implementations

[edit]Incorrectly filtered escape characters
This form of SQL injection occurs when user input is not filtered for escape characters and is then passed into an SQL statement. This results in the potential manipulation of the statements performed on the database by the end-user of the application.
The following line of code illustrates this vulnerability
statement = "SELECT * FROM users WHERE name = '" + userName + "';"
This SQL code is designed to pull up the records of the specified username from its table of users. However, if the "userName" variable is crafted in a specific way by a malicious user, the SQL statement may do more than the code author intended. For example, setting the "userName" variable as
' or '1'='1
Or using comments to even block the rest of the query (there are three types of SQL comments):[10]
' or '1'='1' -- '
' or '1'='1' ({ '
' or '1'='1' /* '
renders one of the following SQL statements by the parent language:
SELECT * FROM users WHERE name = '' OR '1'='1';
SELECT * FROM users WHERE name = '' OR '1'='1' -- ';
If this code were to be used in an authentication procedure then this example could be used to force the selection of a valid username because the evaluation of '1'='1' is always true.
The following value of "userName" in the statement below would cause the deletion of the "users" table as well as the selection of all data from the "userinfo" table (in essence revealing the information of every user), using an API that allows multiple statements:
a';DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't
This input renders the final SQL statement as follows:
SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't';
While most SQL server implementations allow multiple statements to be executed with one call in this way, some SQL APIs such as PHP's mysql_query(); function do not allow this for security reasons. This prevents attackers from injecting entirely separate queries, but doesn't stop them from modifying queries.
[edit]Incorrect type handling
This form of SQL injection occurs when a user supplied field is not strongly typed or is not checked for type constraints. This could take place when a numeric field is to be used in a SQL statement, but the programmer makes no checks to validate that the user supplied input is numeric. For example:
statement := "SELECT * FROM userinfo WHERE id = " + a_variable + ";"
It is clear from this statement that the author intended a_variable to be a number correlating to the "id" field. However, if it is in fact a string then the end-user may manipulate the statement as they choose, thereby bypassing the need for escape characters. For example, setting a_variable to
1;DROP TABLE users
will drop (delete) the "users" table from the database, since the SQL would be rendered as follows:
SELECT * FROM userinfo WHERE id=1;DROP TABLE users;
[edit]Blind SQL injection
Blind SQL Injection is used when a web application is vulnerable to an SQL injection but the results of the injection are not visible to the attacker. The page with the vulnerability may not be one that displays data but will display differently depending on the results of a logical statement injected into the legitimate SQL statement called for that page. This type of attack can become time-intensive because a new statement must be crafted for each bit recovered. There are several tools that can automate these attacks once the location of the vulnerability and the target information has been established.[11]
[edit]Conditional responses
One type of blind SQL injection forces the database to evaluate a logical statement on an ordinary application screen.
SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND '1'='1';
will result in a normal page while
SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND '1'='2';
will likely give a different result if the page is vulnerable to a SQL injection. An injection like this may suggest to the attacker that a blind SQL injection is possible, leaving the attacker to devise statements that evaluate to true or false depending on the contents of another column or table outside of the SELECT statement's column list.[12]
SELECT 1/0 FROM users WHERE username='ooo';
Another type of blind SQL injection uses a conditional timing delay on which the attacker can learn whether the SQL statement resulted in a true or in a false condition [13]
[edit]Mitigation


This section does not cite any references or sources. Please help improve this section by adding citations to reliable sources. Unsourced material may be challenged and removed. (April 2011)
[edit]Parameterized statements
Main article: Prepared statement
With most development platforms, parameterized statements can be used that work with parameters (sometimes called placeholders or bind variables) instead of embedding user input in the statement. In many cases, the SQL statement is fixed, and each parameter is a scalar, not a table. The user input is then assigned (bound) to a parameter.
[edit]Enforcement at the coding level
Using object-relational mapping libraries avoids the need to write SQL code. The ORM library in effect will generate parameterized SQL statements from object-oriented code.
[edit]Escaping
A straightforward, though error-prone, way to prevent injections is to escape characters that have a special meaning in SQL. The manual for an SQL DBMS explains which characters have a special meaning, which allows creating a comprehensive blacklist of characters that need translation. For instance, every occurrence of a single quote (') in a parameter must be replaced by two single quotes ('') to form a valid SQL string literal. For example, in PHP it is usual to escape parameters using the function mysql_real_escape_string(); before sending the SQL query:
$query = sprintf("SELECT * FROM `Users` WHERE UserName='%s' AND Password='%s'",
mysql_real_escape_string($Username),
mysql_real_escape_string($Password));
mysql_query($query);
This function, i.e. mysql_real_escape_string(), calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a. This function must always (with few exceptions) be used to make data safe before sending a query to MySQL.[14]
There are other functions for many database types in PHP such as pg_escape_string() for PostgreSQL. There is, however, one function that works for escaping characters, and used especially for injection in the databases that do not have escaping functions in PHP. This function is: addslashes(string $str ). It returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).[15]
Routinely passing escaped strings to SQL is error prone because it is easy to forget to escape a given string. Creating a transparent layer to secure the input can reduce this error-proneness, if not entirely eliminate it.[16]

Source: Wikipedia

Thứ Hai, 9 tháng 1, 2012

Đà Nẵng dồn sức cho công nghệ cao, công nghệ thông tin và công nghệ sinh học

(ĐNĐT) - Ngày 6-1, UBND thành phố Đà Nẵng tổ chức Hội nghị phối hợp phát triển khoa học và công nghệ (KH&CN) nhằm tổng kết chương trình phối hợp giữa Bộ KH&CN và UBND thành phố giai đoạn 2007-2011 và đề ra chương trình phối hợp giai đoạn 2012-2015.



Lãnh đạo Bộ KH&CN và UBND thành phố ký kết Chương trình phối hợp phát triển KH&CN giai đoạn 2012-2015.
Bộ trưởng KH&CN Nguyễn Quân, Bí thư Thành ủy Đà Nẵng Nguyễn Bá Thanh, Chủ tịch UBND thành phố Đà Nẵng Văn Hữu Chiến chủ trì hội nghị.

Báo cáo tại hội nghị cho biết, trong 5 năm thực hiện Chương trình phối hợp với Bộ KH&CN, thành phố đã có những bước đột phá quan trọng trong đào tạo, phát triển nguồn nhân lực chất lượng cao và chính sách thu hút nguồn nhân lực; tạo hành lang pháp lý ổn định và thông thoáng để sự nghiệp KH&CN phát triển đúng hướng và hiệu quả.

Nhờ sự hỗ trợ của Bộ KH&CN, thành phố đã xây dựng Trung tâm Công nghệ phần mềm, tạo cú hích cho xuất khẩu phần mềm, tăng từ 500 triệu đồng vào năm 2006 lên 1,798 tỷ đồng vào năm 2010. Từ đó, thành phố mạnh dạn xúc tiến xây dựng Khu công nghiệp CNTT tập trung và cũng đã đạt được một số khả quan trong việc ứng dụng công nghệ sinh học trong y dược, xử lý môi trường và sản xuất, chế biến nông lâm ngư nghiệp. Đây là những tiền đề quan trọng để thành phố đề nghị Bộ KH&CN hỗ trợ xây dựng Khu công nghệ cao…

Phát biểu tại hội nghị, Bí thư Thành ủy Nguyễn Bá Thanh nhấn mạnh, trong 10 năm qua, thành phố Đà Nẵng luôn quan tâm và tập trung đầu tư cho nghiên cứu khoa học và KHCN. Trong thời gian tới, thành phố sẽ dồn sức đầu tư cho 3 lĩnh vực trọng tâm, đó là công nghệ cao, công nghệ thông tin, công nghệ sinh học.

Ông Nguyễn Bá Thanh đề nghị Bộ KH&CN hỗ trợ, giúp đỡ về đội ngũ cán bộ, nguồn nhân lực chất lượng cao, đồng thời giới thiệu, tiến cử các chuyên gia hàng đầu, các nhà doanh nghiệp lớn có uy tín đầu tư vào 3 lĩnh vực trên. Thành phố sẽ có chính sách ưu tiên đặc biệt đối với cán bộ giỏi đến công tác và làm việc tại Đà Nẵng.

Bộ trưởng Bộ KH&CN Nguyễn Quân đánh giá cao sự quan tâm của lãnh đạo thành phố trong việc đầu tư và hỗ trợ cho các hoạt động của KH&CN trong thời gian qua, đặc biệt là chính sách trọng dụng cán bộ, chăm lo cho người tài. Bộ trưởng tin tưởng rằng, với kinh nghiệm trong việc giải phóng mặt bằng nhanh, Đà Nẵng sẽ triển khai Khu công nghệ cao sớm hơn so với Hà Nội và TP Hồ Chí Minh.