2011-01-25 11 views
13

मुझे हाल ही में बताया गया था कि FILTER_VALIDATE_INT है जो कि रास्ते से बढ़िया है।PHP सुरक्षा - (int) बनाम FILTER_VALIDATE_INT

मेरा प्रश्न वेबसाइट से एक पूर्णांक मूल्य लेने के मामले में है चाहे वह उपयोगकर्ता से हो या वेब एप्लिकेशन से उत्पन्न हो, और क्वेरी स्ट्रिंग के माध्यम से पारित हो।

मूल्य (पूर्णांक) प्रदर्शित किया जा सकता है या mysql क्वेरी में उपयोग किया जा सकता है।

मैं इसके लिए सबसे अच्छी सुरक्षा विधि तैयार करने की कोशिश कर रहा हूं।

इसे ध्यान में रखते

, इसे सुरक्षित बस का उपयोग करने के

$myNum = (int)$_GET['num']; 

या

if (filter_var($_GET['num'], FILTER_VALIDATE_INT)) $myNum = $_GET['num']; 

इसके अलावा, कृपया समझाने क्या (int) और FILTER_VALIDATE_INT

+0

मौजूदा उत्तरों पर विस्तार करने के लिए, 'FILTER_SANITIZE_NUMBER_INT' '(int)' कास्टिंग के बराबर है। – mario

+3

@ मारियो, आप यह कैसे कह सकते हैं? यह नहीं। –

उत्तर

27

का उपयोग कर अंतर नहीं है के बीच का अंतर है कि int पर एक कास्ट आपको हमेशा int प्राप्त करेगा, जो मूल हो सकता है या नहीं भी हो सकता है मूल्य। जैसे (int)'foobar' परिणाम int0 में परिणाम। यह अधिकांश SQL उद्देश्यों के लिए सुरक्षित बनाता है, लेकिन मूल मूल्य से कोई लेना देना नहीं है, और आप इसे भी नहीं जानते।

filter_varFILTER_VALIDATE_INTसाथ आपको बताती है कि मूल्य पर आप उपयोगकर्ता के लिए एक SQL क्वेरी में उपयोग या कोई त्रुटि संदेश प्रदर्शित करने के लिए फैसला लेने के लिए कर सकते हैं जो आधार पर एक int है।

+0

@deceze क्या आपको पता चलेगा कि 'filter_var' और इसके' is_int' समकक्ष के बीच कोई अंतर है या नहीं? –

+2

@ रसेल डायस: कम से कम '42' 'के परिणाम (स्ट्रिंग के रूप में पूर्णांक पूर्णांक)। – zerkms

+0

@zerkms ओप्स को यह एहसास नहीं हुआ कि यह एक संख्यात्मक स्ट्रिंग का भी परीक्षण करता है। उदाहरण के लिए धन्यवाद;) –

0
<input type="text" name="param"></input> 


$price = filter_input(INPUT_POST, 'param', FILTER_VALIDATE_INT); 
if ($price !== false) { 
print " a number."; //works when value is number 
} 


if(is_int($_POST['param'])){ 
    print "is number."; //don't works when value is number 
} 

कृपया मूल्य संख्या के साथ परीक्षण करने का प्रयास करें।

संबंधित मुद्दे