10/10/2018, 09:50

Giúp đỡ mình về insert dữ liệu từ fckeditor vào csdl

Dưới đây là trang sample01.php chứa bộ gõ fck
PHP Code:
<html>
    <head>
        <title>FCKeditor - Sample</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="robots" content="noindex, nofollow">
        <link href="../sample.css" rel="stylesheet" type="text/css" />
    </head>
    <body>

        <form action="sampleposteddata.php" method="post" target="_blank">
<?php
$sBasePath 
$_SERVER***91;'PHP_SELF'***93; ;
$sBasePath substr$sBasePath0strpos$sBasePath"_samples" ) ) ;

$oFCKeditor = new FCKeditor('FCKeditor1') ;
$oFCKeditor->BasePath    $sBasePath ;
$oFCKeditor->Value        'Nhập nội dung...' ;
$oFCKeditor->Create() ;
?>
            <br>
            <input type="submit" value="Submit">
        </form>
    </body>
</html>
Tiếp theo là trang sampleposteddata.php xử lý dữ liệu do editor gửi sang
PHP Code:
<?php
if ( isset( $_POST ) )
   
$postArray = &$_POST ;            // 4.1.0 or later, use $_POST
else
   
$postArray = &$HTTP_POST_VARS ;    // prior to 4.1.0, use HTTP_POST_VARS

foreach ( $postArray as $sForm => $value )
{
    if ( 
get_magic_quotes_gpc() )
        
$postedValue htmlspecialcharsstripslashes$value ) ) ;
    else
        
$postedValue htmlspecialchars$value ) ;
echo 
htmlspecialchars($sForm) ;
        echo 
<pre>.$postedValue.</pre>;
}
?>
Ví dụ mình copy 1 bức ảnh trên trang dantri.com.vn vào editor và submit thì bên trang xử lý cho ra kết quả:
PHP Code:
<p><span class="bodyContent" id="ctl14_ltrContent"><span style="font-family: Tahoma; font-size: 10pt;"><img width="450" align="center" _fl="" src="http://dantri.vcmedia.vn/Uploaded/2009/10/21/2002-real-madrid_diaporama.jpg" style="margin: 5px;" alt="" /><br />
<
br />
</
span></span></p
Bây giờ mình muốn cho toàn bộ kết quả trên được insert vào csdl, mình thêm đoạn code sau trong trang xử lý
PHP Code:
$connect mysql_connect("localhost","root","");
$select_db mysql_select_db("fck",$connect);
$query "insert into test (noidung) values ('$postedValue')";
$sql mysql_query($query); 
nhưng dữ liệu trong csdl sau khi được thêm vào lại là như sau:
PHP Code:
&lt;p&gt;&lt;span class=&quot;bodyContent&quotid=&quot;ctl14_ltrContent&quot;&gt;&lt;span style=&quot;font-familyTahomafont-size10pt;&quot;&gt;&lt;img width=&quot;450&quotalign=&quot;center&quot_fl=&quot;&quotsrc=&quot;http://dantri.vcmedia.vn/Uploaded/2009/10/21/2002-real-madrid_diaporama.jpg&quot; style=&quot;margin: 5px;&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&
lt;/span&gt;&lt;/span&gt;&lt;/p&gt
Các tag mở/đóng của các thẻ bay đâu hết, mà lại còn bị mã hóa như trên.
Bạn nào biết mình sai vì sao, hãy chỉ giùm mình với. Cám ơn sự giúp đỡ của các bạn !
thuyduongcd viết 12:04 ngày 10/10/2018
Điều này là bình thường vì mã hóa các tag là một trong các chức năng của FCK.
Nếu muốn không bị mã hóa, bạn có thể "hack" nó.
- Mở file samples\php\sampleposteddata.php lên.
- Tìm dòng
Code:
$postedValue = htmlspecialchars( $value ) ;
- Thêm vào bên dưới nó đoạn code sau:
Code:
    <?php
    $findThese = array('&quot; maxlength=', '&quot; align=', '&quot; src=', '&quot; alt=', '&quot; align=', 'width=&quot;', '&quot; width=', 'cellpadding=&quot;', '&quot; cellpadding', 'cellspacing=&quot;', 'cols=&quot;', '&quot; type=', '&quot; size=', 'maxlength=&quot;', 'size=&quot;', 'border=&quot;', '&quot; border=', 'summary=&quot;', '&quot; summary=', 'align=&quot;', '&quot; cols=', 'rows=&quot;', 'name=&quot;', 'type=&quot;', '&quot; name=', '&quot; value=', 'alt=&quot;&quot;', 'alt=&quot;', '&quot; checked', 'checked=&quot;', 'color=&quot;', '&quot;&gt;', '&lt;br /&gt;' , 'href=&quot;' , '/&gt;', '&gt;', '&lt;', '&quot;button&quot;', 'style=&quot;', 'value=&quot;', '&amp;nbsp;', 'src=&quot;', '&quot; >');
    $replaceWith = array('" maxlength=', '" align=', '" src=', '" alt=', '" align=', 'width="', '" width=', 'cellpadding="', '" cellpadding', 'cellspacing="', 'cols="', '" type=', '" size=', 'maxlength="', 'size="', 'border="', '" border=', 'summary="', '" summary=', 'align="', '" cols=', 'rows="', 'name="', 'type="', '" name=', '" value=', 'alt=""', 'alt="', '" checked', 'checked="', 'color="', '">', '<BR>' , 'href="' , '>', '>', '<', '"button"', 'style="', 'value="', '&nbsp;', 'src="', '">');
    $inputString= $postedValue;
    $outputString = str_replace($findThese, $replaceWith, $inputString);
    ?>
Vậy là xong!
tuanit85 viết 12:01 ngày 10/10/2018
Được gửi bởi thuyduongcd
Điều này là bình thường vì mã hóa các tag là một trong các chức năng của FCK.
Nếu muốn không bị mã hóa, bạn có thể "hack" nó.
- Mở file samples\php\sampleposteddata.php lên.
- Tìm dòng
Code:
$postedValue = htmlspecialchars( $value ) ;
- Thêm vào bên dưới nó đoạn code sau:
Code:
    <?php
    $findThese = array('&quot; maxlength=', '&quot; align=', '&quot; src=', '&quot; alt=', '&quot; align=', 'width=&quot;', '&quot; width=', 'cellpadding=&quot;', '&quot; cellpadding', 'cellspacing=&quot;', 'cols=&quot;', '&quot; type=', '&quot; size=', 'maxlength=&quot;', 'size=&quot;', 'border=&quot;', '&quot; border=', 'summary=&quot;', '&quot; summary=', 'align=&quot;', '&quot; cols=', 'rows=&quot;', 'name=&quot;', 'type=&quot;', '&quot; name=', '&quot; value=', 'alt=&quot;&quot;', 'alt=&quot;', '&quot; checked', 'checked=&quot;', 'color=&quot;', '&quot;&gt;', '&lt;br /&gt;' , 'href=&quot;' , '/&gt;', '&gt;', '&lt;', '&quot;button&quot;', 'style=&quot;', 'value=&quot;', '&amp;nbsp;', 'src=&quot;', '&quot; >');
    $replaceWith = array('" maxlength=', '" align=', '" src=', '" alt=', '" align=', 'width="', '" width=', 'cellpadding="', '" cellpadding', 'cellspacing="', 'cols="', '" type=', '" size=', 'maxlength="', 'size="', 'border="', '" border=', 'summary="', '" summary=', 'align="', '" cols=', 'rows="', 'name="', 'type="', '" name=', '" value=', 'alt=""', 'alt="', '" checked', 'checked="', 'color="', '">', '<BR>' , 'href="' , '>', '>', '<', '"button"', 'style="', 'value="', '&nbsp;', 'src="', '">');
    $inputString= $postedValue;
    $outputString = str_replace($findThese, $replaceWith, $inputString);
    ?>
Vậy là xong!
Hàm bạn gửi mình hình như Hack chưa hết, nói đúng hơn là các ký tự unicode nó vẫn bị mã hóa. Bạn có hàm nào Hack kỹ hơn không. Theo mình thì hàm htmlspecialchars có chức năng mã hóa. Vậy mình chỉ việc thực hiện như sau không biết có phát sinh lỗi không.
PHP Code:

foreach($postArray as $sForm => $value)
{
    
$outputString $value;
}

$query "insert into test (noidung) values('$outputString')";
$sql mysql_query($query); 
Đã test thử, hiện giờ thì vẫn ổn. Bạn cho mình ý kiến.
Vô Thin viết 11:58 ngày 10/10/2018
Đọc tài liệu FCKEditor và chỉnh trong file .js cấu hình của nó để đạt được mục đích, tuy nhiên cần cẩn thận vì nếu không làm như FCKEditor mà như ta dễ đọc thì có khả năng bị dính lỗi XSS rất là cao nếu form nhập liệu cho người không đáng tin cậy sử dụng.
thuyduongcd viết 12:00 ngày 10/10/2018
Được gửi bởi tuanit85
Hàm bạn gửi mình hình như Hack chưa hết, nói đúng hơn là các ký tự unicode nó vẫn bị mã hóa. Bạn có hàm nào Hack kỹ hơn không. Theo mình thì hàm htmlspecialchars có chức năng mã hóa. Vậy mình chỉ việc thực hiện như sau không biết có phát sinh lỗi không.
PHP Code:

foreach($postArray as $sForm => $value)
{
    
$outputString $value;
}

$query "insert into test (noidung) values('$outputString')";
$sql mysql_query($query); 
Đã test thử, hiện giờ thì vẫn ổn. Bạn cho mình ý kiến.
Không có lỗi. Nhưg hãy thử tưởng tượng một ngày nào đó có một anh chàng rỗi hơi input vào đó 1 cái tag: <script>bad code</script>
Và khi show cái content này ra, dĩ nhiên browser xem nó như 1 script code hẳn hoi. Vậy là "toi" . Chính vì lẽ đó mà FCK mới mã hóa chứ không thì nó mã hóa làm gì.
Bởi vậy mình chỉ decode lại những tag "vô hại" thôi, còn script tag thì vẫn bị mã hóa chứ không phải "thiếu" như bạn tưởng đâu
tuanit85 viết 12:01 ngày 10/10/2018
Được gửi bởi thuyduongcd
Không có lỗi. Nhưg hãy thử tưởng tượng một ngày nào đó có một anh chàng rỗi hơi input vào đó 1 cái tag: <script>bad code</script>
Và khi show cái content này ra, dĩ nhiên browser xem nó như 1 script code hẳn hoi. Vậy là "toi" . Chính vì lẽ đó mà FCK mới mã hóa chứ không thì nó mã hóa làm gì.
Bởi vậy mình chỉ decode lại những tag "vô hại" thôi, còn script tag thì vẫn bị mã hóa chứ không phải "thiếu" như bạn tưởng đâu
Vậy bạn cho mình hướng giải quyết với, thật sự mình đang bí chỗ này
1024KB viết 11:57 ngày 10/10/2018
Mình thấy có làm sao đâu. Dùng hàm
Code:
html_entity_decode
để decode nó.
thuyduongcd viết 11:58 ngày 10/10/2018
Được gửi bởi 1024KB
Mình thấy có làm sao đâu. Dùng hàm
Code:
html_entity_decode
để decode nó.
Vậy nếu người ta nhập vào nội dung:
Code:
<script>
while (true){
 alert ("loop");
}
</script>
Thì hậu quả thế nào?
kenphan19 viết 11:50 ngày 10/10/2018
Được gửi bởi thuyduongcd
Điều này là bình thường vì mã hóa các tag là một trong các chức năng của FCK.
Nếu muốn không bị mã hóa, bạn có thể "hack" nó.
- Mở file samples\php\sampleposteddata.php lên.
- Tìm dòng
Code:
$postedValue = htmlspecialchars( $value ) ;
- Thêm vào bên dưới nó đoạn code sau:
Code:
    <?php
    $findThese = array('&quot; maxlength=', '&quot; align=', '&quot; src=', '&quot; alt=', '&quot; align=', 'width=&quot;', '&quot; width=', 'cellpadding=&quot;', '&quot; cellpadding', 'cellspacing=&quot;', 'cols=&quot;', '&quot; type=', '&quot; size=', 'maxlength=&quot;', 'size=&quot;', 'border=&quot;', '&quot; border=', 'summary=&quot;', '&quot; summary=', 'align=&quot;', '&quot; cols=', 'rows=&quot;', 'name=&quot;', 'type=&quot;', '&quot; name=', '&quot; value=', 'alt=&quot;&quot;', 'alt=&quot;', '&quot; checked', 'checked=&quot;', 'color=&quot;', '&quot;&gt;', '&lt;br /&gt;' , 'href=&quot;' , '/&gt;', '&gt;', '&lt;', '&quot;button&quot;', 'style=&quot;', 'value=&quot;', '&amp;nbsp;', 'src=&quot;', '&quot; >');
    $replaceWith = array('" maxlength=', '" align=', '" src=', '" alt=', '" align=', 'width="', '" width=', 'cellpadding="', '" cellpadding', 'cellspacing="', 'cols="', '" type=', '" size=', 'maxlength="', 'size="', 'border="', '" border=', 'summary="', '" summary=', 'align="', '" cols=', 'rows="', 'name="', 'type="', '" name=', '" value=', 'alt=""', 'alt="', '" checked', 'checked="', 'color="', '">', '<BR>' , 'href="' , '>', '>', '<', '"button"', 'style="', 'value="', '&nbsp;', 'src="', '">');
    $inputString= $postedValue;
    $outputString = str_replace($findThese, $replaceWith, $inputString);
    ?>
Vậy là xong!
Chắc bác này là héc cơ đây ^^ mắc mớ gì phái héc với hiết trong khi FCK là 1 bộ WYSIWYG chuẩn đc rất nhiều người dùng. Thử động nảo nghĩ xem chẳng lẻ FCK nó lại làm thế để bạn ngồi héc nó sao ?
vào fckconfig.js mà config nhé ... chắc trước giờ dùng chưa bao giờ mở cái file đó ra xem
tuanit85 viết 11:57 ngày 10/10/2018
Được gửi bởi kenphan19
Chắc bác này là héc cơ đây ^^ mắc mớ gì phái héc với hiết trong khi FCK là 1 bộ WYSIWYG chuẩn đc rất nhiều người dùng. Thử động nảo nghĩ xem chẳng lẻ FCK nó lại làm thế để bạn ngồi héc nó sao ?
vào fckconfig.js mà config nhé ... chắc trước giờ dùng chưa bao giờ mở cái file đó ra xem
Nếu bạn biết thì hướng dẫn giùm mình được không. Cám ơn nhiều...
Bài liên quan
0