PHP The Fourth Day
                                       ðào Quang Minh
        Trung tâm Tính toán Hi u năng cao – ðHBK Hà N i
                                  minh0302@gmail.com
                       http://hpcc.hut.edu.vn/~minhdq
Chương 3: PHP và MySQL




1. Các bư c truy c p CSDL


2. SQL Injection
Các bư c truy c p cơ s d li u
T o k t n i ñ n Database Server

$bi n_k t_n i =
mysql_connect(“máy_ch ”,“tên”,“m t_kh u”)
or die(“Không k t n i ñư c”);
Hàm die(“Chu i”): ðưa ra thông báo và k t
thúc.
V i cách vi t trên, die ch th c hi n khi l nh
trư c nó không thành công
$cnn =
mysql_connect(“localhost”,”coursek50”,”123
456”);
L a ch n cơ s d li u

mysql_select_db(“Tên CSDL”)
or die (“Chưa có CSDL”);


mysql_select_db(“coursek50”);
Vi t truy v n

$bi n = mysql_query(“L nh SQL”)
or die(“Không th c hi n ñư c SQL”);


$sql = mysql_query(“Select * From
account Where username = ‘coursek50’
”);
Các hàm h tr

mysql_affected_rows(): S b n ghi b tác
ñ ng b i l nh mysql_query li n trư c
mysql_num_rows(): K t qu s b n ghi
c a câu l nh mysql_query
mysql_error(): Thông báo l i (n u có)
mysql_errno(): Mã l i
Các hàm x lý k t qu

mysql_fetch_array($sql): tr v m t dòng
b n ghi dư i d ng m t m ng v i ch m c
d ng s ho c tên c a trư ng.
mysql_fetch_row($sql): tr v k t qu là
m t m ng có th t (b t ñ u t 0)
mysql_fetch_assoc($sql): tr v k t qu là
m t m ng ñư c ñánh ch s b ng tên


Tham kh o t i: http://vn2.php.net/mysql
SQL Injuction
Th nào là SQL Injection

Là m t k thu t cho phép nh ng k t n
công thi hành các câu l nh truy v n SQL
b t h p pháp
B ng cách l i d ng l h ng trong vi c
ki m tra d li u nh p trong các ng d ng
web
Ví d

$sql=mysql_query(“Select * From
account Where username = ‘$user’ And
password = ‘$pass’”)
N u như User nh p bi n User là: “OR 1 OR
user=“ thì câu l nh SQL s là:
SELECT * FROM users WHERE user = "" OR 1
OR user="" AND password = "$password“
 Và k t qu tr v s là toàn b user trong cơ s
d li u
(ti p)

$sql=“Insert Into table_name
  Values(‘$val1’,’$val2’,’$val3’)”;
 N u như các bi n val1 thành như sau:
 ‘ + (Select Top 1 Fieldname From
 TableName) +’
  Insert Into TableName Values(‘’ +
 Select Top 1 FieldName From
 TableName)+ ‘’,’$val2,’$val3’)
Cách phòng tránh

SQL Injection khai thác nh ng b t c n c a
các l p trình viên phát tri n ng d ng web
khi x lý d li u nh p vào
Tùy vào môi trư ng và cách c u hình h
th ng mà tác h i là n ng hay nh
(ti p)

Ki m soát ch t ch d       li u nh p vào
– Gi i h n chi u dài c a chu i nh p li u
– Xây d ng hàm thay th d u 1 nháy ñơn b ng
  2 d u nháy ñơn
– Xây d ng hàm lo i b m t s kí t     và t   khóa
  nguy hi m
– Dùng hàm addslashes ñ thêm “” vào trư c
  chu i nh p vào
Ví d

Hàm length ñ gi i h n ñ dài
Hàm thay th ‘ thành ‘‘
function replace($input)
{
    $output = str_replace("'","''",$input);
    return $output;
}
(ti p)

Hàm lo i b các kí t          không mong mu n
function killchar($input)
{
    $len = strlen($input);
    $char = array("select","drop",";","--
    ","insert","delete","xp_");
    $output = str_replace($char,"",$input);
    return $output;

}
L p trình AJAX
Gi i thi u

AJAX = Asynchronous JavaScript And XML
AJAX không ph i là ngôn ng m i mà là
m t cách m i s d ng các ngôn ng ñã
có.
AJAX giúp ta t o các trang web nhanh
hơn, ti n l i hơn, thân thi n hơn khi s
d ng.
AJAX là t p h p c a nhi u công ngh v i
th m nh c a riêng mình ñ t o thành
m t s c m nh m i
ð c ñi m AJAX

Là công ngh c a web browser. ð c l p
v i web server.
S d ng JavaScript ñ g i và nh n d   li u
gi a client và server.
AJAX d a trên:
– JavaScript
– XML
– HTML
– CSS
AJAX s   d ng XML và HTTP Request
So sánh



             Click –Wait-And-Refresh




Ajax based
Truy xu t d    li u t   server trong JavaScript

V i IE6: s     d ng Msxml2.XMLHTTP:
XMLHttp =
   new ActiveXObject("Msxml2.XMLHTTP")
V i IE5.6: s    d ng Microsoft.XMLHTTP
XMLHttp =
   new ActiveXObject("Microsoft.XMLHTTP")
V i trình duy t khác: XMLHttpRequest
XMLHttp=new XMLHttpRequest()
Mã l nh t ng quát
function GetXMLHttpObject(){
   var oXMLHttp=null
   try{
        oXMLHttp=new ActiveXObject("Msxml2.XMLHttp")
   }
   catch(e){
        try{
          oXMLHttp=new ActiveXObject("Microsoft.XMLHttp")
        }
        catch (e){}
   }
   if (oXMLHttp==null)
        oXMLHttp=new XMLHttpRequest()
  return oXMLHttp;
}
ð i tư ng XMLHttpRequest

Các phương th c
– open(“method,”url”): Thi t l p yêu c u ñ n
  server (ñ a ch trang c n k t n i ñ n)
– send(content): G i yêu c u ñ n server.
– abort(): H y yêu c u hi n t i
Các thu c tính
– readyState: Tr ng thái hi n t i c a ñ i tư ng.
– onreadystatechange: B x lý s ki n cho m t
  s ki n phát sinh khi có thay ñ i tr ng thái
– responseText: Chu i d   li u tr v .
(ti p)

responseXML Response tr v t server
dư i d ng XML. ð i tư ng này có th ñư c
phân tách và kh o sát như m t ñ i tư ng
tài li u DOM.
status Mã tr ng thái HTTP t server
(ch ng h n 200 n u không có l i, 404 cho
l i Not Found, …).
statusText Thông ñi p c a mã tr ng thái
HTTP (ch ng h n OK hay Not Found, …)
Thu c tính readyState

readyState=0: Chưa kh i t o: sau khi t o ñ i
tư ng XMLHttpRequest nhưng chưa g i open().
readyState=1: V a kh i t o: sau khi g i open()
nhưng chưa g i send().
readyState=2: V a g i ñi: ngay sau khi g i
send().
readyState=3: ðang x lý: sau khi k t n i ñ n
server nhưng server chưa tr l i.
readyState=4: Xong: sau khi server tính toán
xong, d li u ñã g i v xong.
Quá trình tương tác

1. M t event client-side gây ra 1 s ki n –
   Ajax event. B t kỳ m t tác ñ ng nào
   cũng có th gây ra Ajax event


  <input type="text" id="email"
  name="email" onblur =
  "validateEmail()";>
(ti p)

2. M t th hi n c a XMLHttpRequest ñư c
   t o ra:
  –   dùng phương th c open()
  –   t o l i g i hàm
  –   ñ a ch URL ñư c thi t l p cùng v i phương
      th c Http ñư c yêu c u
  –   request ñư c t o ra qua vi c g i send()
(ti p)
var xmlHttp;
function validateEmail() {
var email = document.getElementById("email");
var url = "validate?email=" + escape(email.value);
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
xmlHttp.open("GET", url);
xmlHttp.onreadystatechange = callback;
xmlHttp.send(null);
}
(ti p)

3. M t request ñư c t o và g i ñ n server
4. Server x lý yêu c u (truy c p cơ s d
   li u, tác v h th ng...)
5. Response ñư c tr v cho trình duy t (x
   lý d ng text/xml)
  header('Content-Type: text/xml');
(ti p)

6. C u hình XMLHttpRequest ñ g i hàm
   callback() khi k t qu x lý ñư c tr v
  function callback() {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
  //do something interesting here
        }
    }
  }

Php day4

  • 1.
    PHP The FourthDay ðào Quang Minh Trung tâm Tính toán Hi u năng cao – ðHBK Hà N i minh0302@gmail.com http://hpcc.hut.edu.vn/~minhdq
  • 2.
    Chương 3: PHPvà MySQL 1. Các bư c truy c p CSDL 2. SQL Injection
  • 3.
    Các bư ctruy c p cơ s d li u
  • 4.
    T o kt n i ñ n Database Server $bi n_k t_n i = mysql_connect(“máy_ch ”,“tên”,“m t_kh u”) or die(“Không k t n i ñư c”); Hàm die(“Chu i”): ðưa ra thông báo và k t thúc. V i cách vi t trên, die ch th c hi n khi l nh trư c nó không thành công $cnn = mysql_connect(“localhost”,”coursek50”,”123 456”);
  • 5.
    L a chn cơ s d li u mysql_select_db(“Tên CSDL”) or die (“Chưa có CSDL”); mysql_select_db(“coursek50”);
  • 6.
    Vi t truyv n $bi n = mysql_query(“L nh SQL”) or die(“Không th c hi n ñư c SQL”); $sql = mysql_query(“Select * From account Where username = ‘coursek50’ ”);
  • 7.
    Các hàm htr mysql_affected_rows(): S b n ghi b tác ñ ng b i l nh mysql_query li n trư c mysql_num_rows(): K t qu s b n ghi c a câu l nh mysql_query mysql_error(): Thông báo l i (n u có) mysql_errno(): Mã l i
  • 8.
    Các hàm xlý k t qu mysql_fetch_array($sql): tr v m t dòng b n ghi dư i d ng m t m ng v i ch m c d ng s ho c tên c a trư ng. mysql_fetch_row($sql): tr v k t qu là m t m ng có th t (b t ñ u t 0) mysql_fetch_assoc($sql): tr v k t qu là m t m ng ñư c ñánh ch s b ng tên Tham kh o t i: http://vn2.php.net/mysql
  • 9.
  • 10.
    Th nào làSQL Injection Là m t k thu t cho phép nh ng k t n công thi hành các câu l nh truy v n SQL b t h p pháp B ng cách l i d ng l h ng trong vi c ki m tra d li u nh p trong các ng d ng web
  • 11.
    Ví d $sql=mysql_query(“Select *From account Where username = ‘$user’ And password = ‘$pass’”) N u như User nh p bi n User là: “OR 1 OR user=“ thì câu l nh SQL s là: SELECT * FROM users WHERE user = "" OR 1 OR user="" AND password = "$password“ Và k t qu tr v s là toàn b user trong cơ s d li u
  • 12.
    (ti p) $sql=“Insert Intotable_name Values(‘$val1’,’$val2’,’$val3’)”; N u như các bi n val1 thành như sau: ‘ + (Select Top 1 Fieldname From TableName) +’ Insert Into TableName Values(‘’ + Select Top 1 FieldName From TableName)+ ‘’,’$val2,’$val3’)
  • 13.
    Cách phòng tránh SQLInjection khai thác nh ng b t c n c a các l p trình viên phát tri n ng d ng web khi x lý d li u nh p vào Tùy vào môi trư ng và cách c u hình h th ng mà tác h i là n ng hay nh
  • 14.
    (ti p) Ki msoát ch t ch d li u nh p vào – Gi i h n chi u dài c a chu i nh p li u – Xây d ng hàm thay th d u 1 nháy ñơn b ng 2 d u nháy ñơn – Xây d ng hàm lo i b m t s kí t và t khóa nguy hi m – Dùng hàm addslashes ñ thêm “” vào trư c chu i nh p vào
  • 15.
    Ví d Hàm lengthñ gi i h n ñ dài Hàm thay th ‘ thành ‘‘ function replace($input) { $output = str_replace("'","''",$input); return $output; }
  • 16.
    (ti p) Hàm loi b các kí t không mong mu n function killchar($input) { $len = strlen($input); $char = array("select","drop",";","-- ","insert","delete","xp_"); $output = str_replace($char,"",$input); return $output; }
  • 17.
  • 18.
    Gi i thiu AJAX = Asynchronous JavaScript And XML AJAX không ph i là ngôn ng m i mà là m t cách m i s d ng các ngôn ng ñã có. AJAX giúp ta t o các trang web nhanh hơn, ti n l i hơn, thân thi n hơn khi s d ng. AJAX là t p h p c a nhi u công ngh v i th m nh c a riêng mình ñ t o thành m t s c m nh m i
  • 19.
    ð c ñim AJAX Là công ngh c a web browser. ð c l p v i web server. S d ng JavaScript ñ g i và nh n d li u gi a client và server. AJAX d a trên: – JavaScript – XML – HTML – CSS AJAX s d ng XML và HTTP Request
  • 20.
    So sánh Click –Wait-And-Refresh Ajax based
  • 21.
    Truy xu td li u t server trong JavaScript V i IE6: s d ng Msxml2.XMLHTTP: XMLHttp = new ActiveXObject("Msxml2.XMLHTTP") V i IE5.6: s d ng Microsoft.XMLHTTP XMLHttp = new ActiveXObject("Microsoft.XMLHTTP") V i trình duy t khác: XMLHttpRequest XMLHttp=new XMLHttpRequest()
  • 22.
    Mã l nht ng quát function GetXMLHttpObject(){ var oXMLHttp=null try{ oXMLHttp=new ActiveXObject("Msxml2.XMLHttp") } catch(e){ try{ oXMLHttp=new ActiveXObject("Microsoft.XMLHttp") } catch (e){} } if (oXMLHttp==null) oXMLHttp=new XMLHttpRequest() return oXMLHttp; }
  • 23.
    ð i tưng XMLHttpRequest Các phương th c – open(“method,”url”): Thi t l p yêu c u ñ n server (ñ a ch trang c n k t n i ñ n) – send(content): G i yêu c u ñ n server. – abort(): H y yêu c u hi n t i Các thu c tính – readyState: Tr ng thái hi n t i c a ñ i tư ng. – onreadystatechange: B x lý s ki n cho m t s ki n phát sinh khi có thay ñ i tr ng thái – responseText: Chu i d li u tr v .
  • 24.
    (ti p) responseXML Responsetr v t server dư i d ng XML. ð i tư ng này có th ñư c phân tách và kh o sát như m t ñ i tư ng tài li u DOM. status Mã tr ng thái HTTP t server (ch ng h n 200 n u không có l i, 404 cho l i Not Found, …). statusText Thông ñi p c a mã tr ng thái HTTP (ch ng h n OK hay Not Found, …)
  • 25.
    Thu c tínhreadyState readyState=0: Chưa kh i t o: sau khi t o ñ i tư ng XMLHttpRequest nhưng chưa g i open(). readyState=1: V a kh i t o: sau khi g i open() nhưng chưa g i send(). readyState=2: V a g i ñi: ngay sau khi g i send(). readyState=3: ðang x lý: sau khi k t n i ñ n server nhưng server chưa tr l i. readyState=4: Xong: sau khi server tính toán xong, d li u ñã g i v xong.
  • 26.
    Quá trình tươngtác 1. M t event client-side gây ra 1 s ki n – Ajax event. B t kỳ m t tác ñ ng nào cũng có th gây ra Ajax event <input type="text" id="email" name="email" onblur = "validateEmail()";>
  • 27.
    (ti p) 2. Mt th hi n c a XMLHttpRequest ñư c t o ra: – dùng phương th c open() – t o l i g i hàm – ñ a ch URL ñư c thi t l p cùng v i phương th c Http ñư c yêu c u – request ñư c t o ra qua vi c g i send()
  • 28.
    (ti p) var xmlHttp; functionvalidateEmail() { var email = document.getElementById("email"); var url = "validate?email=" + escape(email.value); if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } xmlHttp.open("GET", url); xmlHttp.onreadystatechange = callback; xmlHttp.send(null); }
  • 29.
    (ti p) 3. Mt request ñư c t o và g i ñ n server 4. Server x lý yêu c u (truy c p cơ s d li u, tác v h th ng...) 5. Response ñư c tr v cho trình duy t (x lý d ng text/xml) header('Content-Type: text/xml');
  • 30.
    (ti p) 6. Cu hình XMLHttpRequest ñ g i hàm callback() khi k t qu x lý ñư c tr v function callback() { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { //do something interesting here } } }