|
|
|
สอบถามปัญหาการใช้งาน str_replace กับ real_escape_string |
|
|
|
|
|
|
|
ผมเจอปัญหาในตอนที่ผมตัดอักขระพิเศษครับ ใครช่วยอธิบายที
Code (PHP)
$mysqli =mysqli_connect('my_host', 'my_user', 'my_pass', 'my_db');
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
}
$text = "!@#$%^&*()_+|}{?>'<script>alert('aaaaa');</script>";
$aa = $mysqli->real_escape_string($text);
echo $aa."<br>";
$letters = array('<','>','*', '#','?','$','!','%','^','{','}','(',')','|');
$bb = str_replace($letters,'',$aa);
echo $bb;
นี่ส่วนแสดงผล
!@#$%^&*()_+|}{?>\'
@&_+\'scriptalert\'aaaaa\';/script
อยากทราบว่า ทำไมถึงยังมีคำว่า script ทั้งๆทีเราตัดออกไปแล้ว
Tag : PHP
|
|
|
|
|
|
Date :
2015-05-11 17:10:30 |
By :
พีรพล |
View :
1154 |
Reply :
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองใช้ตัวนี้ดูก็ได้ครับ
Code (PHP)
function clean($input){
$input = trim($input);
if(get_magic_quotes_gpc()) {
$input = stripslashes($input);
}
#ตัด html tag
$input = strip_tags($input);
return mysql_real_escape_string($input);
}
$text = "!@#$%^&*()_+|}{?>'<script>alert('aaaaa');</script>";
echo clean($text);
|
|
|
|
|
Date :
2015-05-11 17:46:20 |
By :
arm8957 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
07.echo $aa."<br>";
ผลลัพธ์ เป็น
!@#$%^&*()_+|}{?>\'
ที่เห็นแบบนี้เพราะ <script>alert('aaaaa');</script> ถูกซ่อนไว้ไม่โชว์ บนหน้าเพจปกติครับ
ต้อง view source ออกมาดูถึงจะเห็น
|
|
|
|
|
Date :
2015-05-11 19:31:09 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มันทำงานกันคนละแบบครับ
real_escape_string( ) เป็นการตรวจเช็ค อักขระพิเศษ เพื่อป้องกัน injection
จำพวก quote ครับ ไม่ได้ตัดคำครับ เป็นการเพิ่มอักษรเข้าไปหน้าอักษรพิเศษครับ
ใช้ str_replace() preg_replace() ถูกต้องแล้วครับ
|
|
|
|
|
Date :
2015-05-12 06:15:58 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|