เมนูหลัก

addslash กับ sql injection

เริ่มโดย nokia201, 12 กันยายน 2013, 01:47:46

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

nokia201

อยากจะถามว่า function addslashes นี้สามารถป้องกัน sql injection ได้ไหมครับ
ขอบคุณครัับ  :wanwan017:
ขายสคริปปั้มไลค์ตามเว็บดูหนังใช้กันสนใจ PM ครับ

Misaka

กันได้ครับแต่ปรกติผมใช้ htmlspecialchars($query,ENT_QUOTES)
รอท่าอื่นมาตอบครับ  :wanwan017:

dekmv


dekmv

อ้างถึงจาก: Misaka ใน 12 กันยายน 2013, 01:58:16
กันได้ครับแต่ปรกติผมใช้ htmlspecialchars($query,ENT_QUOTES)
รอท่าอื่นมาตอบครับ  :wanwan017:
htmlspecialchars($query,ENT_QUOTES)

ได้เล่นกันครับ

MapTwoZa

#4
1. การป้องกัน sql injection แบบเก่าๆ เลิกใช้ได้แล้วพวก mysql_real_escape_string
php เค้าเอาออกแล้วครับ (current stable version ปัจจุบันอยู่ที่ 5.5)

2. ไปใช้ MYSQL PDO/ MYSQLi prepare statement แล้ว bind parameter เอา
(ไม่ต้องนั่งกังวลอีกต่อไป รับมายังไงก็ bind ไปอย่างนั้น จบ)


<?php
$stmt 
$dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name'$name);
$stmt->bindParam(':value'$value);

// insert one row
$name 'one';
$value 1;
$stmt->execute();

// insert another row with different values
$name 'two';
$value 2;
$stmt->execute();
?>




เพิ่มเติม 3.
พวก html filter ต่างๆ ไม่เกี่ยวกับ sql injection
แต่เกี่ยวกับการป้องกัน post html tag / script tag ขึ้นมาบนเว็บ
Good code quality Developer :D

nokia201

ขอบคุณทุกท่านมากๆครับ
ขายสคริปปั้มไลค์ตามเว็บดูหนังใช้กันสนใจ PM ครับ

igensite

อ้างถึงจาก: MapTwoZa ใน 12 กันยายน 2013, 08:44:17
1. การป้องกัน sql injection แบบเก่าๆ เลิกใช้ได้แล้วพวก mysql_real_escape_string
php เค้าเอาออกแล้วครับ (current stable version ปัจจุบันอยู่ที่ 5.5)

2. ไปใช้ MYSQL PDO/ MYSQLi prepare statement แล้ว bind parameter เอา
(ไม่ต้องนั่งกังวลอีกต่อไป รับมายังไงก็ bind ไปอย่างนั้น จบ)


<?php
$stmt 
$dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name'$name);
$stmt->bindParam(':value'$value);

// insert one row
$name 'one';
$value 1;
$stmt->execute();

// insert another row with different values
$name 'two';
$value 2;
$stmt->execute();
?>




เพิ่มเติม 3.
พวก html filter ต่างๆ ไม่เกี่ยวกับ sql injection
แต่เกี่ยวกับการป้องกัน post html tag / script tag ขึ้นมาบนเว็บ

ขอบคุณครับผม

igensite

$stmt->bindParam(':name', $name);

หมายความว่าอะไรครับ ?

adidog

อ้างถึงจาก: MapTwoZa ใน 12 กันยายน 2013, 08:44:17
1. การป้องกัน sql injection แบบเก่าๆ เลิกใช้ได้แล้วพวก mysql_real_escape_string
php เค้าเอาออกแล้วครับ (current stable version ปัจจุบันอยู่ที่ 5.5)

2. ไปใช้ MYSQL PDO/ MYSQLi prepare statement แล้ว bind parameter เอา
(ไม่ต้องนั่งกังวลอีกต่อไป รับมายังไงก็ bind ไปอย่างนั้น จบ)


<?php
$stmt 
$dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name'$name);
$stmt->bindParam(':value'$value);

// insert one row
$name 'one';
$value 1;
$stmt->execute();

// insert another row with different values
$name 'two';
$value 2;
$stmt->execute();
?>




เพิ่มเติม 3.
พวก html filter ต่างๆ ไม่เกี่ยวกับ sql injection
แต่เกี่ยวกับการป้องกัน post html tag / script tag ขึ้นมาบนเว็บ

เห็นแล้วคิดถึง .net แจ่มๆ น่าจะทำแบบนี้มาตั้งนานแล้ว
Certain Dri [direct=http://www.ishiclub.com/]Certain Dri[/direct]
คุณแม่มือใหม่ [direct=http://www.mamyget.com/]คุณแม่มือใหม่[/direct]

dekmv

กำลังศึกษา PDO อยู่พอดีครับ ... อันนี้แบบเก่าแล้วครับ  :wanwan012:

xvlnw.com

ใช้พวก Framework เขียนเลยก็ได้ครับ
มี SE มาให้แล้ว
[direct=https://cloudhost.in.th/wordpress-hosting]ツ ⓌⓄⓇⒹⓅⓇⒺⓈⓈ ⒽⓄⓈⓉⒾⓃⒼ [/direct] :wanwan014:  :D
[direct=https://cloudhost.in.th/cloudhosting.html]Cloud Hosting[/direct] [direct=https://cloudhost.in.th/cloudvps.html]Cloud Server[/direct] [direct=https://cloudhost.in.th/vpshosting.html]Cloud VPS Hosting[/direct] [direct=https://cloudhost.in.th/windowsvps.html]Cloud Windows[/direct] Tel: 080-348-0843 LINE: ixvlnw

dekmv

อ้างถึงจาก: xvlnw.com ใน 12 กันยายน 2013, 16:52:05
ใช้พวก Framework เขียนเลยก็ได้ครับ
มี SE มาให้แล้ว

ยังไงอ่ะครับ ...  :P

xvlnw.com

อ้างถึงจาก: dekmv ใน 12 กันยายน 2013, 16:53:51
อ้างถึงจาก: xvlnw.com ใน 12 กันยายน 2013, 16:52:05
ใช้พวก Framework เขียนเลยก็ได้ครับ
มี SE มาให้แล้ว

ยังไงอ่ะครับ ...  :P

ตัวอย่างของ CI ครับ
http://codeigniter.in.th/user_guide/database/active_record.html
[direct=https://cloudhost.in.th/wordpress-hosting]ツ ⓌⓄⓇⒹⓅⓇⒺⓈⓈ ⒽⓄⓈⓉⒾⓃⒼ [/direct] :wanwan014:  :D
[direct=https://cloudhost.in.th/cloudhosting.html]Cloud Hosting[/direct] [direct=https://cloudhost.in.th/cloudvps.html]Cloud Server[/direct] [direct=https://cloudhost.in.th/vpshosting.html]Cloud VPS Hosting[/direct] [direct=https://cloudhost.in.th/windowsvps.html]Cloud Windows[/direct] Tel: 080-348-0843 LINE: ixvlnw

ฉันไม่มีตัวตน

งานเข้าล่ะผม ใช้ mysql_real_escape_string ทุกเว็บเลย :wanwan004:

xvlnw.com

อ้างถึงจาก: ฉันไม่มีตัวตน ใน 12 กันยายน 2013, 17:56:38
งานเข้าล่ะผม ใช้ mysql_real_escape_string ทุกเว็บเลย :wanwan004:

ยังดีกว่าไม่ทำครับผม :)
[direct=https://cloudhost.in.th/wordpress-hosting]ツ ⓌⓄⓇⒹⓅⓇⒺⓈⓈ ⒽⓄⓈⓉⒾⓃⒼ [/direct] :wanwan014:  :D
[direct=https://cloudhost.in.th/cloudhosting.html]Cloud Hosting[/direct] [direct=https://cloudhost.in.th/cloudvps.html]Cloud Server[/direct] [direct=https://cloudhost.in.th/vpshosting.html]Cloud VPS Hosting[/direct] [direct=https://cloudhost.in.th/windowsvps.html]Cloud Windows[/direct] Tel: 080-348-0843 LINE: ixvlnw

ฉันไม่มีตัวตน

ผมนั่งอ่านบทความนี้มามะกี้ http://www.thaicreate.com/community/basic-mysqli-reference.html

ตกลงใช้แบบไหนหรอครับ ไม่รู้จริงๆนะ อยากเขียน OOP มานาน

แบบของคุณ MapTwoZa ที่ใช้ prepare เรียกว่าอะไรหรอครับ ใช่ OOP หรือเปล่า

MapTwoZa

mysqli กับ mysql pdo
ในเชิงลึกๆ ผมไม่แน่ใจนะว่ามันต่างกันยังไง
ซึ่งปรกติผมก็ไม่ได้ใช้ pdo ตรงๆครับ
ผมจะใช้ doctrine2 เป็นตัวจัดการ database อีกที ( ที่เลือกใช้ตัวนี้เพราะมันเป็น framework ที่แทบจะเหมือนกับ JPA ใน java ทำให้ผมไม่ต้องเรียนรู้อะไรมากมาย แล้วเท่าที่อ่าน review ก็ถือเป็นตัวที่ดีที่สุดตัวนึงบน php )
http://www.doctrine-project.org/

ก่อนเริ่ม pdo vs mysqli มาดูก่อนครับว่าทำไมเค้าเอา mysql ธรรมดาออก

เหตุผลก็คือ เพราะมันไม่มี prepare statement ครับ
ซึ่ง prepare statement จำเป็นมากในด้านการป้องการ sql injection ในภาษาอื่นๆ ก็สามารถใช้ prepare statement ได้เกือบทั้งหมด
แล้ว prepare statement ก็กัน sql injection ได้ 100%


ประเด็นต่อไป mysqli vs pdo
pdo มีความเป็น oop มากกว่า แล้วเหมาะนำไปใช้ใน ORM มากกว่า เอาข้อดีของ pdo ที่เหนือกว่า mysqli ก่อนละกัน

1. auto injection คือมันสามารถ query มาแล้ว auto set parameter ลง object ได้เลยครับ ตัวอย่างข้างล่าง (ตรงนี้ mysqli ก็มี แต่ดูแล้วยุ่งยากกว่านิดๆ ไม่เป็นไปในเชิง OO เท่าไรด้วย)

     $dbh = new PDO("mysql:host=$hostname;dbname=school", $username, $password)

    $stmt = $dbh->query("SELECT * FROM students");

    /* MAGIC HAPPENS HERE */

    $stmt->setFetchMode(PDO::FETCH_INTO, new Student);


    foreach($stmt as $student)
    {
        echo $student->getFullName().'<br />';
    }


2. database support
mysqli ใช้ได้กับ mysql อย่างเดียว
กลับกัน pdo รองรับ database ได้ถึง 12 แบบ
โปรเจคเปลี่ยนจาก mysql เป็น sql server
โครงสร้างเดิม เปลี่ยน driver ก็ใช้งานได้ปรกติครับ

3. binding parameter
pdo สามารถ bind ใส่ name ที่ต้องการได้ครับ แต่ mysqli ต้อง bind ตามลำดับเท่านั้น !!

#PDO

$params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600);   
$pdo->prepare('
   SELECT * FROM users
   WHERE username = :username
   AND email = :email
   AND last_login > :last_login');   
$pdo->execute($params);


#MySQLi

$query = $mysqli->prepare('
   SELECT * FROM users
   WHERE username = ?
   AND email = ?
   AND last_login > ?');   
$query->bind_param('sss', 'test', $mail, time() - 3600);
$query->execute();

Good code quality Developer :D

xvlnw.com

[direct=https://cloudhost.in.th/wordpress-hosting]ツ ⓌⓄⓇⒹⓅⓇⒺⓈⓈ ⒽⓄⓈⓉⒾⓃⒼ [/direct] :wanwan014:  :D
[direct=https://cloudhost.in.th/cloudhosting.html]Cloud Hosting[/direct] [direct=https://cloudhost.in.th/cloudvps.html]Cloud Server[/direct] [direct=https://cloudhost.in.th/vpshosting.html]Cloud VPS Hosting[/direct] [direct=https://cloudhost.in.th/windowsvps.html]Cloud Windows[/direct] Tel: 080-348-0843 LINE: ixvlnw

9wong

เหมือนจะมีในเล่มนี้  สำหรับการเขียนแบบ คุณ MapTwoZa

ถ้าผมจำไม่ผิด เพราะยังไม่ได้สอยมาอ่าน แฮะๆ แค่ไปแอบส่องๆ


ossytong

addslashes()

สามารถป้องกันได้ครับ

แต่การมีผลต่อ SQL INJECTION มันจะไม่สามารถสรุปได้ตรงๆหรอกครับ ว่าเราจะใช้อะไรกันได้ หรือไม่ได้ มันอยู่ที่ เคส SQL Cmd จริงๆครับ

แต่ addslashes() เป็น 1 ในทางเลือกการป้องกัน SQL INJECTION ที่ได้ผล ครับ