में MySQL पूर्ण टेक्स्ट खोज के मिलान किए गए संदर्भ को पुनर्प्राप्त करना मैं अपनी MySQL तालिका "पृष्ठों" पर एक पूर्ण टेक्स्ट खोज कर रहा हूं। मैं उन पृष्ठों की एक सूची प्रदर्शित कर रहा हूं जो कीवर्ड को उनके "शीर्षक" (सादा पाठ, वचरर, 255) या "सामग्री" (एचटीएमएल, टेक्स्ट) में मेल खाते हैं। जब मैच "सामग्री" फ़ील्ड में मिलता है, तो मैं स्निपेट प्रदर्शित करना चाहता हूं जिसमें मैच मिला था। मुझे नहीं पता कि इस बारे में कैसे जाना है।PHP (और सुरक्षा)
क्या आप मुझे सही दिशा में डाल सकते हैं?
$query = ' SELECT
*,
MATCH(title, content) AGAINST("'.$keyword.'") AS score
FROM
page
WHERE
MATCH(title, content) AGAINST("'.$keyword.'")
ORDER BY
score
DESC ';
$result = mysql_query($query) or die (mysql_error());
if(mysql_num_rows($result) > 0) {
$output .= '<p>Your keyword matches the following pages:</p>';
while($row = mysql_fetch_assoc($result)){
$title = htmlentities($row['title']);
$content = htmlentities(strip_tags($row['content']));
$content = limit_text($content, 250); // Cuts it down to 250 characters plus ...
$output .= '<h2>'.$title.'</h2>';
if(trim($content) != '') {
$output .= '<p>'.$content.'</p>'; // I'd like to place a snippet here with the matched context
}
}
} else {
$output .= '<p>Keyword not found...</p>';
}
इसके अलावा, मेरे पास सुरक्षा के बारे में कोई सवाल है। अभी मैं $keyword
को तीन तरीकों से देख रहा हूं:
- खाली नहीं है?
- 2 से अधिक वर्ण?
- खतरनाक नहीं है? (देखें नीचे)
मैं रेगुलर एक्सप्रेशन का उपयोग, निम्नलिखित मैच के लिए देखने के लिए कि उपयोगकर्ता इनपुट खतरनाक है
<script|<script|>script|document.|alert|bcc:|cc:|x-mailer:|to:|recipient|truncate|drop table
इस को हल करने के लिए एक छोटा सा हास्यास्पद और आसान हो सकता है, लेकिन यह एक्सएसएस शोषण के खिलाफ कम से कम सुरक्षा का न्यूनतम रूप है। खोज के उद्देश्य से लक्षित कीवर्ड को सुरक्षित करने का अनुशंसित तरीका क्या है? PHPIDS ओवरकिल है?
अपने प्रश्न के सुरक्षा हिस्से के जवाब में, [पीडीओ] (http://php.net/manual/en/ref.pdo-mysql.php) का उपयोग करें यदि आप कर सकते हैं। अन्यथा आपको 'mysql_real_escape_string()' के माध्यम से कम से कम '$ कीवर्ड' चलाएं। – glomad
आपकी एक्सएसएस सुरक्षा कमजोर है। यह भी कहना सुरक्षित है कि 'ड्रॉप टेबल' ** इस कोड पर हमला नहीं कर सकता है क्योंकि 'mysql_query() 'क्वेरी स्टैकिंग की अनुमति नहीं देता है। – rook
@itchy धन्यवाद, मैं 'पीडीओ 'की जांच करूंगा, लेकिन अभी के लिए मैं सिर्फ' mysql_real_escape_string() 'का उपयोग करूंगा, धन्यवाद। @Rook, आपकी अंतर्दृष्टि के लिए धन्यवाद, मुझे यह एहसास है, यही कारण है कि मैं एक विकल्प की तलाश में हूं। – maartenmachiels