Я использую три разных способа предотвращения уязвимости моего веб-приложения для SQL-инъекции.
mysql_real_escape_string()
, которое является предопределенной функцией в PHP , и этот код добавляет обратную косую черту к следующим символам: \x00
, \n
, \r
, \
, '
, "
и \x1a
. Передайте входные значения в качестве параметров, чтобы свести к минимуму вероятность внедрения SQL. Надеюсь, это поможет вам.
Рассмотрим следующий запрос:
$iId = mysql_real_escape_string("1 OR 1=1");
$sSql = "SELECT * FROM table WHERE id = $iId";
mysql_real_escape_string () здесь не защитит. Если вы используете одиночные кавычки ('') вокруг ваших переменных внутри вашего запроса, это то, что защищает вас от этого. Ниже приведено ниже решение:
$iId = (int) mysql_real_escape_string("1 OR 1=1");
$sSql = "SELECT * FROM table WHERE id = $iId";
В этом вопросе есть хорошие ответы.
Я предлагаю , наилучшим вариантом является использование PDO.
Изменить:
mysql_real_escape_string()
устарел с PHP 5.5.0. Используйте либо mysqli, либо PDO.
Альтернативой mysql_real_escape_string () является
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
Пример:
$iId = $mysqli->real_escape_string("1 OR 1=1");
$mysqli->query("SELECT * FROM table WHERE id = $iId");
Управление ListView имеет проблему мерцания. Проблема, кажется, что перегрузка Обновления управления неправильно реализована таким образом, что она действует как Обновление. Обновление должно заставить управление перерисовывать только свои недопустимые регионы, тогда как Обновление перерисовывает control’s всю клиентскую область. Таким образом, если необходимо было изменить, скажем, цвет фона одного объекта в списке тогда только, что конкретный объект должен должен быть быть перекрашен. К сожалению, управление ListView, кажется, имеет различное мнение и хочет перекрасить его всю поверхность каждый раз, когда Вы смешиваете с единственным item†¦, даже если объект в настоящее время не отображается. Так, так или иначе можно легко подавить мерцание путем прокрутки собственного следующим образом:
class ListViewNF : System.Windows.Forms.ListView
{
public ListViewNF()
{
//Activate double buffering
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
//Enable the OnNotifyMessage event so we get a chance to filter out
// Windows messages before they get to the form's WndProc
this.SetStyle(ControlStyles.EnableNotifyMessage, true);
}
protected override void OnNotifyMessage(Message m)
{
//Filter out the WM_ERASEBKGND message
if(m.Msg != 0x14)
{
base.OnNotifyMessage(m);
}
}
}
В дополнение к другим ответам много средств управления имеют [Begin|End]Update()
метод, который можно использовать для сокращения мерцания при редактировании содержания - например:
listView.BeginUpdate();
try {
// listView.Items... (lots of editing)
} finally {
listView.EndUpdate();
}
Да, заставьте его удвоиться буферизованный. Это уменьшит мерцание;) http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.doublebuffered.aspx
Попытайтесь установить двойное буферизированное свойство в истинном.
Также Вы могли использовать:
this.SuspendLayout();
//update control
this.ResumeLayout(False);
this.PerformLayout();
Это работало лучше всего на меня.
, Так как Вы редактируете ячейку непосредственно, лучшее решение в Вашем случае состояло бы в том, чтобы просто обновить/перезагрузить ту конкретную ячейку/строку вместо всей таблицы.
Вы могли использовать RedrawItems(...)
метод, который в основном перекрашивает только указанный диапазон объектов/строк listview.
public void RedrawItems(int startIndex, int endIndex, bool invalidateOnly);
Ссылка
Это полностью избавилось от полное мерцание listview для меня.
Только соответствующий объект/запись мерцает, будучи обновленным.
За Ваше здоровье!
Отличный вопрос, и ответ Сторменента был точным. Вот порт его кода на C ++ для всех, кто может заниматься реализациями C ++ / CLI.
#pragma once
#include "Windows.h" // For WM_ERASEBKGND
using namespace System;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
public ref class FlickerFreeListView : public ListView
{
public:
FlickerFreeListView()
{
//Activate double buffering
SetStyle(ControlStyles::OptimizedDoubleBuffer | ControlStyles::AllPaintingInWmPaint, true);
//Enable the OnNotifyMessage event so we get a chance to filter out
// Windows messages before they get to the form's WndProc
SetStyle(ControlStyles::EnableNotifyMessage, true);
}
protected:
virtual void OnNotifyMessage(Message m) override
{
//Filter out the WM_ERASEBKGND message
if(m.Msg != WM_ERASEBKGND)
{
ListView::OnNotifyMessage(m);
}
}
};