我的网站上有文本框.此文本框使用form和post方法提供文本值.此表单在数据库中搜索特殊文本.如何确定sql injectin或xss的安全输入数据.
尝试学习和理解 SQL 注入。
谁能向我解释为什么' or 1=1; --- 允许我绕过身份验证但or 1=1没有?
可能重复: 如何在mysql插入语句中包含PHP变量
如何使用此函数清除从URL中提取的变量?假设我有$id变量,它是从"www.mydomain.com/single-page?id=534"中提取的,我想在MySQL select语句中使用它之前让它变得安全.
<?php
class SecureSqlInjection
{
function specificData($val)
{
$val = htmlspecialchars(stripslashes(trim($val)));
$val = str_ireplace("script", "blocked", $val);
$val = mysql_escape_string($val);
return $val;
}
function secureSuperGlobalGET(&$value, $key)
{
if(!is_array($_GET[$key]))
{
$_GET[$key] = htmlspecialchars(stripslashes($_GET[$key]));
$_GET[$key] = str_ireplace("script", "blocked", $_GET[$key]);
$_GET[$key] = mysql_real_escape_string($_GET[$key]);
}
else
{
$c=0;
foreach($_GET[$key] as $val)
{
$_GET[$key][$c] = mysql_real_escape_string($_GET[$key][$c]);
$c++;
}
}
return $_GET[$key];
}
function secureSuperGlobalPOST(&$value, $key)
{
if(!is_array($_POST[$key]))
{
$_POST[$key] = htmlspecialchars(stripslashes($_POST[$key]));
$_POST[$key] = str_ireplace("script", "blocked", $_POST[$key]);
$_POST[$key] = mysql_real_escape_string($_POST[$key]);
}
else …Run Code Online (Sandbox Code Playgroud) 我试图理解更多的SQL注入的安全含义,并且不确定这一点,我无法在网上找到任何有用的东西.
我们可以通过正确编写Javascript代码来防止SQL注入吗?怎么样?
干杯
我一直被MySQL注射困扰,并且正在考虑一种消除这个问题的方法.我有什么事了如下的希望,很多人会觉得这非常有用.
我能想到的唯一回退是部分搜索:Jo =>使用类似的%%语句返回"John".
这是一个php解决方案:
<?php
function safeQ(){
$search= array('delete','select');//and every keyword...
$replace= array(base64_encode('delete'),base64_encode('select'));
foreach($_REQUEST as $k=>$v){
str_replace($search, $replace, $v);
}
}
safeQ();
function html($str){
$search= array(base64_encode('delete'),base64_encode('select'));
$replace= array('delete','select');//and every keyword...
str_replace($search, $replace, $str);
}
//example 1
...
...
$result = mysql_fetch_array($query);
echo html($result[0]['field_name']);
//example 2
$select = 'SELECT * FROM $_GET['query'] ';
//example 3
$insert = 'INSERT INTO .... value( $_GET['query'] )';
?>
Run Code Online (Sandbox Code Playgroud)
我知道,我知道你仍然可以注射使用1=1或任何其他类型的注射...但我认为这可以解决你的问题的一半,所以正确的mysql查询被执行.
所以我的问题是,如果有人能找到任何退款,请随时在这里发表评论.
如果您认为这是一个非常有用的解决方案并且没有发现任何重大缺点,或者您认为这些都是一个坏主意,请给出答案...