Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > php + mysql ถามแนวคิดเรื่อง my_sql_real_escape_string หน่อยครับ



 

php + mysql ถามแนวคิดเรื่อง my_sql_real_escape_string หน่อยครับ

 



Topic : 096676

Guest




พอดีเขียนเว็บโดยใช้ .htaccess redirect ไปหน้า index ทั้งหมดครับ ยกเว้น รูปภาพ กับ css
แต่ว่าเวลาเรียกใช้ฟังก์ชัน(oop) ก็ต้องเขียนคำสั่งเพื่อดักอักษรพิเศษโดย my_sql_real_escape_string
มาเจอปัญหาเวลาต้อง get กับ post ครับ ทำให้ต้องเขียนตัวแปรมากขึ้น เลยลองใช้วิธีนี้ดังต่อไปนี้ดูเพื่อลดโค๊ดลงแต่ไม่แน่ใจว่าปลอดภัยไหม


index.php
<?php

if($_GET){
	foreach($_GET as $key => $value){
		$_GET[$key] = $Gen->secure_text($value);
	} 
}else if($_POST){
	foreach($_POST as $key => $value){
		$_POST[$key] = $Gen->secure_text($value);
	} 
}

//ไฟล์ include

?>


แบบนี้จะมีช่องโหว่ไหมครับ รบกวนพี่ๆเซียนๆด้วยครับ



Tag : PHP







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-06-17 20:09:38 By : บอสคุง View : 791 Reply : 7
 

 

No. 1



โพสกระทู้ ( 437 )
บทความ ( 3 )



สถานะออฟไลน์


secure_text() มันทำงานยังไงครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-17 21:03:50 By : randOmizE
 


 

No. 2

Guest


อ๋อๆ เป็นฟังก์ชั่นทั่วๆไปครับ

Code (PHP)
public function secure_text($data){
	if(get_magic_quotes_gpc()){
		$data = stripslashes($data);
	}
	return strip_tags(mysql_real_escape_string($data));
}


ไม่ค่อยมีคนตอบเลยแฮะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-17 21:16:48 By : บอสคุง
 

 

No. 3



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

แบบนั้นไม่ดีครับ
เพราะคุณทึกทักเอาว่า ทุกสิ่งที่ส่งมาจากผุ้ใช้ จะต้องเข้าฐานข้อมูล
ซึ่งมันอาจจะมีบางอย่างที่ไม่ต้องเข้า
การทำแบบนั้นจะทำให้โปรแกรมทำงานโดยไม่จำเป็น และอาจจะทำให้เกิดบั๊กโดยไม่ตั้งใจ
อย่าขี้เกียจครับ อะไรที่ต้องอยู่ query ถึงจะใช้ mysql_real_escape_string()
อะไรที่อยากจะ striptag() ถึงจะใช้ striptag()

ถ้าขี้เกียจพิมพ์ยาวๆ เราสามารถสร้างฟังก์ชั่นตัวช่วยได้

ตัวอย่างฟังก์ชั่นตัวช่วย ที่จะ escape argument ทุกตัว และแทนที่ลงใน query ตามรูปแบบของฟังก์ชั่นตระกูล printf() ให้อัตโนมัติ
<?php
function mysql_queryf()
{
	$args = func_get_args();
	$query = array_shift($args);
	if ($args) {
		foreach ($args as &$arg) {
			$arg = mysql_real_escape_string($arg);
		}
		return mysql_query(vsprintf($query, $args));
	}
	return mysql_query($query);
}


ตอนใช้ก็ประมาณนี้
$result = mysql_queryf(
    "SELECT * FROM `users` WHERE `username` = '%s' AND `password` = '%s'",
    $_POST['username'],
    $_POST['password']
);

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-17 21:30:33 By : cookiephp
 


 

No. 4



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

ส่วน get_magic_quotes_gpc() ไม่ควรใช้ เราไม่ควรตรวจการทำงานส่วนนี้
ให้ตั้งค่าลงใน .htaccess แทน และให้ตั้งเงื่อนไขไว้เลยว่า
โปรแกรมของเราจะต้องทำงานใน setting ที่ปิด magic_quotes_gpc ไว้เท่านั้น
เพราะไม่ดีเลยหากต้องจะมาเรียกใช้ฟังก์ชั่นนี้ทุกครั้ง ทำให้ทำงานช้าครับ

ถ้าเป็นผม จะตรวจตั้งแต่เริ่มโปรแกรม ถ้ามีการเปิดใช้งาน magic_quotes_gpc ก็จะจบการทำงานเลย
<?php
if (get_magic_quotes_gpc()) {
    echo 'magic_quotes_gpc must be disabled.';
    exit;
}

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-17 21:34:53 By : cookiephp
 


 

No. 5



โพสกระทู้ ( 437 )
บทความ ( 3 )



สถานะออฟไลน์


ที่จริงมันไม่แน่เสมอไปว่าถ้าใช้ mysql_real_escape_string() แล้วมันจะป้องกันได้ และมันก็ไม่จำเป็นต้องกรองไปหมดอย่างคุณแมวของคุกกี้ว่า

ควรกรองเฉพาะอันที่จะเอาไป query ในฐานข้อมูลก็พอแล้ว

สมมติ โค๊ดประมาณนี้

Code (PHP)
$sql = "select * from tableX where user='".mysql_real_escape_string($getOrpostUser)."' and pwd='".mysql_real_escape_string($getOrpostPwd)."' ";


แบบข้างบนพอจะกันได้ แต่ 100% หรือป่าวไม่รู้

Code (PHP)
$getOrpostId = mysql_real_escape_string($_GET['id']);

$sql = "select * from tablexx where id= $getOrpostId "; // ไม่มี '



แบบนี้กันไม่ได้ เจอเต็มๆ

มันแล้วแต่กรณี บางอย่างเช็คความยาว เช็คชนิดว่าเป็นตัวเลขหรืออักษร เอาให้แน่ไปเลย ถ้าเช็คลวกๆเดี๋ยวอาจมีอะไรเล็ดลอดไปได้

ลองศึกษาเรื่อง sql injection และวิธีอื่นๆแล้วลองใช้กับเว็บตัวเองดู แล้วค่อยๆปรับปรุงไป(อย่าเพิ่งเอาขึ้นโฮสต์ก่อนทดลองนะครับ) ถ้าเราไม่รู้ช่องโหว่เราก็อุดมันยาก
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-17 22:58:03 By : randOmizE
 


 

No. 6

Guest


มีแต่เทพจริงๆด้วย อิอิ ขอบคุณครับ แต่ขอตัวอย่าง magic_quotes_gpc ใน htaccess ด้วยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-18 01:44:00 By : บอสคุง
 


 

No. 7



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

นี่คือ .htaccess ที่ปิด "ทุกอย่างที่ไม่ดีและล้าสมัย" ทิ้งไปหมดครับ
และเปิดการแสดง error ทุกอย่าง
ใครเขียนโปรแกรม PHP ด้วย setting นี้ผ่านโดยไม่มี error ผมถือว่าเก่งครับ

.htaccess
php_value short_open_tag 0 php_value display_errors 1 php_value error_reporting -1 php_value register_globals 0 php_value register_long_arrays 0 php_value magic_quotes_gpc 0 php_value magic_quotes_runtime 0 php_value allow_call_time_pass_reference 0 php_value always_populate_raw_post_data 0 php_value date.timezone Asia/Bangkok

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-18 02:02:54 By : cookiephp
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : php + mysql ถามแนวคิดเรื่อง my_sql_real_escape_string หน่อยครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่